位运算符笔记

位运算符笔记

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

计算的但不知道什么时候用,有什么作用,举个例子
int color=0xffff0000;
要取出它的透明度只需要

color >> 24     就能得到FF

FFFF0000 转成二进制: 111111111111111000000000000000
而>>24后结果:11111111 111111110000000000000000
转成16进制既是:FF

无符号右移

无符号右移(>>>),就是在位移过程中不考虑符号因素,都做为正数处理。符号位为始终为0
9>>>3 和-9>>>3等值

9=     00001001
>>     00000001001   =1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章