指针,比特位操作
来源:互联网 发布:mac如何修改磁盘名称 编辑:程序博客网 时间:2024/04/29 02:54
为了找工作,最近在看《程序员面试宝典》第四版,发现之前学习C++都是太肤浅了。原来比特位操作还可以很灵活的运用哈...
1.用一个表达式判断一个数X是不是2的N次方(N为整数),不可用循环语句。
!(X&(X-1))
2.不使用任何中间变量,交换a和b的值。
a = a^b;
b = a^b;
a = a^b;
3.指针和基于比特位运算的小算法
#include <stdio.h>#include <cmath>int f(int x, int y){return (x&y) + ((x^y)>>1);//实质功能:求取两个整数的均值}int Add(int x, int y){if (y == 0){return x;}int sum, carry;sum = x^y; //第一步没有进位的加法运算carry = (x&y)<<1; //第二步进位并且左移运算return Add(sum,carry);}inline int Max(int x, int y){return ((x+y) + abs(x-y))/2;//选择两个整数中最大数,新思路}inline int max(int a, int b) {return a>=b? a:b;}inline int min(int a, int b) {return a<=b? a:b;}inline int medium(int a, int b, int c){int t1 = max(a,b);int t2 = max(b,c);int t3 = max(a,c);return min(t1,min(t2,t3));}int main(){unsigned int a = 0xFFFFFF7;unsigned char i = (unsigned char)a;char* b = (char*)&a;/** 等价于:* unsigned int *p = &a;* char* b = (char*)p;*/printf("No.1 Pointer problem:\n");printf("%08x, %08x \n", i, *b);printf("No.2 MeanAdd problem:\n");int meanX = f(729,271);int addX = Add(2,8);printf("%d, %d\n", meanX, addX);printf("No.3 Max problem:\n");int maxv = Max(3,5);printf("%d\n",maxv);printf("No.4 Median problem:\n");int medianv = medium(3,7,9);printf("%d\n",medianv);return 0;}
0 0
- 指针,比特位操作
- C中位比特操作
- 比特位操作算法题汇总
- 算法设计(一) 比特位操作
- 比特位操作——更新二进制
- 比特位操作——二进制表示
- 颠倒比特位
- 位操作/指针和数组/字符串
- C 内存相关,位操作,指针,等
- 位操作(C和指针)
- 比特位操作——Flip Bits(将整数A转化为B)
- 比特位操作——二进制中有多少个1
- 比特位操作——O(1)时间检测2的幂次
- 实现对一个8比特位数据(unsigned char)的指定位的置0或者置1操作
- Delphi内存指针操作说明--怎样把字符串的内容拷贝到比特数组中?
- 置位比特位置查找
- java的比特位枚举
- 比特币,莱特币操作
- HDU 2149 Public Sale(巴士博弈)
- 封装a.64p成.x64p达芬奇工具链的建立(工程编译步骤)g
- CareerCup How to find medium of 1 billion numbers across N distributed machines efficiently?
- 初识UML
- Regional_2011_H Holiday's Accommodation
- 指针,比特位操作
- [DP]TYVJ P1049 最长不下降子序列
- 数据挖掘-决策树ID3分类算法的C++实现
- 黑客电子书54本
- 入门视频采集与处理(学会分析YUV数据)
- C++中public,protected,private访问
- hdu 1102
- 怪异模式(Quirks Mode)对 HTML 页面的影响w
- V4L2视频采集与H.264编码源码大放送:Linux视频采集与编码