一基本位操作符
& 位与 | 位或 ~ 位反 ^ 位异或 <<左移 >> 右移
(1)&: 参加运算的两个数据,按位进行与运算。如果两个相应的位都为1,则该位为1,否则为0
&用途:用屏蔽字“与”变量可以取出变量的某些位:
例如 a 00101100 10101100
b 00000000 11111111这里b被称为“位掩码”,作用如同筛子。注意:位掩码应与所操作的值相同长度
例:16位机上,使某个数最低一位为0,其他位不变。int i=11; i = i & 0xFFFE; 这样的源程序就失去了可移植性。(例如:从16位机移植到32位机) 较好的写法:i = i & ~1;
(2)| : 参加运算的两个数据,按位进行或运算。如果两个相应的位至少有一个为1,则该位为1,否则为0。
| 用途:可以设置变量的某些位为1:
(3)~ 用来对一个二进制数按位取反。即将0变1,1变0。
(4)^ : 若两个相应的位同号,则该位为0,不同则为1。
^ 位异或用途:可以使变量某个特定的位翻转,与0相^保留原值,与1^取反,与自身^结果为0。
(5)左位移运算符(<<)
无符号数左移一位相当于该数乘以2。<<移位时,移出的高位全部丢弃,低位全补0。
(6)右位移运算符(>>)
无符号数右移一位相当于该数除以2。>>移位时,移出的位数全部丢弃。
对于无符号数,则高位补0;
对于有符号数,则符号位补0还是1,不确定。
二 基本位操作符—使用归纳
(1) 判断int型变量a是奇数还是偶数
a&1 如果等于0 偶数 如果=1奇数
(2) 取int型变量a的第k位(k=0,1,2……31) a>>k&1
(3) 将int型变量a的第k位清0 a=a&~(1<<k)
(4)将int型变量a的第k位置1 a=a|(1<<k)
(5) int型变量a循环左移k次 a=a<<k|a>>32-k (设sizeof(int)=4)
(6) int型变量a循环右移k次 a=a>>k|a<<32-k (设sizeof(int)=4)
(7)交换变量的值 a = a^b; b = a^b; a = a^b;
C的哲学就是简单,C认为程序员应该勇敢的承担责任