一、位的概念
在计算机中,一字节占8位(现在的某些电脑也有占16位的),也即00000000-11111111。位就是里面的0和1。
char c=100; 实际上c应该是01100100,正好是0x64。其中高位在前,低位在后。在某些计算机上面点大在后存储为0x46
二、位运算符:
&与,|或,~非,^异或,<<左移,>>右移
&=自身与、|=自身或、~=自身非、^=自身异或
例如:
b=a<<3; 就是a的值左移两位并赋值为b。a本身的值并没有改变。等价于b=a*8;
int num;
if (num & 1 == 1); // 判断最后一位是否是1
num >>= 1;
num = num >> 1; // num右移1位
三、常见操作
给num的第5位(最小是第0位)置1、或置0、或判断是否为1
1.第一种操作
num |= (1<<5); //给num第5位置1;因为跟1或=1;跟0或=不变
num &= ~(1<<5); //给num第5位置0;因为跟0与=0;跟1与=不变
num ^= (1<<5); //给num第5位取反;因为跟1异或=1,跟0异或=不变
num & (1<<5) //=0表示第5位是0;!=0表示第五位是1
num >> 5 & 1 //得到num第5位;
#define bit_set(num, pos) (num |= (1<<pos)) //给num第pos位置1
#define bit_clr(num, pos) (num &= !(1<<pos)) //给num第pos位置0
#define bit_rev(num, pos) (num ^= (1<<pos)) //给num第pos位取反
#define bit_que(num, pos) (num & (1<<pos)) //判断num的第pos是否为0;!=0就是1
#define bit_get(num, pos) (num >> pos & 1) //获得num的第pos位