位运算符笔记

时间:2022-04-08 17:24:17

位运算符笔记

十进制: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