位运算:
- 按位与 &;9&5;任何运算符都有运算结果;
- 针对二进制进行计算;只有两个对应位都为1时,结果才为1;否则为0;
- 按位与的作用是能精确知道哪位是多少,获取某个精确的二进制位;
按位或 |
- 对应的两个二进位有一个为1时,就为1;9|5
按位异或 ^
- 9 ^ 5;当两个二进制位不相同是为1;
- 相同数值进行异或,结果肯定是0,比如9 ^ 9为0;
- 异或的值可以交换位置;9^5^6 == 9^6^5;
- 任何数值跟0进行异或,结果还是原来的数值;
- a^b^a==b
按位取反,包括符号位;
- 是单目运算符;~9;
左移
- 9<<1;把整数全部往左边移动n位(a<<n),往左边一挪,最高位会舍弃,最低位补0;9往左挪动一位,就是9*2的1次方==18;往左挪动2位,就是9*2的2次方==36;
- 最高位舍弃可能会导致正负性改变;
右移
- 右移一位,是保留符号位,空的位置用符号位来补齐;8>>1得到4;8>>2得到2;
- 8>>n;就得到8/2的n次方;
- 左移是乘法;右移是除法;
- a=b-1;b=b-a;a=b+a;或者a = a^b;b=a^b;a=a^b;用位与运算是a&1 ==1是奇数;a&1 ==0是偶数;
- 拿值就是位与1;将9打印出2进制出来;可以用右移方法;number >>30 & 1;
- int temp = (sizeof(number)<<3) -1;while(temp>=0){int value = number>>temp & 1;printf("%d",value);temp--;if((temp+1)%4==0){printf("")}}printf(" ")