位运算符笔记
十进制:42
对应二进制:
原码:00000000000000000000000000101010
反码:11111111111111111111111111010101
补码:11111111111111111111111111010110
//补码=原码取反+1=反码+1
11111111111111111111111111010101
+ 1
11111111111111111111111111010110
42取反(反码):~42
按位与 & 运算
9 & 5
9= 1001
5= 0101
0001 =1
9 & 5 =1
通常与255(11111111或十六进制0xFF)做&运算,高八位清 0 , 保留低八位
按位或 | 运算
9 | 5
9= 00001001
5= 00000101
00001101 =13
按位异或 ^ 运算
9 ^ 5
9= 00001001
5= 00000101
00001100 =12
左移运算 <<
左移运算符“<<”是双目运算符。左移n位就是乘以2的n次方。 其功能把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。
9<<3
9= 00001001
<< 00001001000 =72
右移运算 >>
右移运算符“>>”是双目运算符。右移n位就是除以2的n次方
应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。
9>>3
9= 00001001
>> 00000001001 =1
-9>>3
-9= 10001001
>> 11100001001 =-777
无符号右移
无符号右移(>>>),就是在位移过程中不考虑符号因素,都做为正数处理。符号位为始终为0
9>>>3 和-9>>>3等值
9= 00001001
>> 00000001001 =1