黑马程序员-c语言学习位运算总结

来源:互联网 发布:淘宝整点抢购在哪里 编辑:程序博客网 时间:2024/04/27 21:35

------Java培训、Android培训、iOS培训、.Net培训 期待与您交流------


今晚学到了位运算,做一下总结

1.按位与 & :

只有对应的两个二进位均为1时,结果位才为1,否则为0。(换算成二进制 同1位1,有0位0)

举例: 9&2 先转换成二进制为1001&0010=0000,9&2==0
利用位与&运算可以判断变量的奇偶性
因为二进制末位是1得为奇数,为0的为偶数
a & 1==1//为奇数
a& 0==0//为偶数

2.按或与 | :

只要对应的二个二进位有一个为1时,结果位就为1,否则为0。(换算成二进制 同0位0,有1位1)

举例:9|2 >1001|0010=1011,即就是9|2==11

3.按位异或 ^ :

当对应的二进位相异(不相同)时,结果为1,否则为0。

要点:
(1)相同数值进行异或,结果肯定为0,1^1=0
(2)交换 9^5^7 ==9^7^5
(3)任何数值跟0进行异或,结构还是原来的数值.8^0==0
根据以上条件可以得出下面结论
a^c^b == a^a^c ==0^c ==c

根据按位异或^可以用来是交换两个变量的数值
int a =10;
int b=11;
a=a^b;
b=a^b;
a=a^b;
输出结果:a=11,b=10


4.~ 取反:

对整数a的各二进位进行取反,符号位也取反(0变1,1变0)

 没什么说的,就是各种取反就行

5.<< 左移
(1)把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方
(2)由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性
规律:9<<1 -> 9 * 2的1次方 == 18
9<<2 -> 9 * 2的2次方 ==36
……….
9<<n -> 9 * 2的n次方


6.>> 右移
(1)把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方
(2)为正数时, 符号位为0,最高位补0
(3)为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定
规律:8>>1 -> 8/2 == 4
8>>2 -> 8/2的2次方 == 2
……...
8>>n -> 8/2的n次方
0 0