JAVA位运算

  原码 反码 补码(机器码)
+1 0000 0001 0000 0001 0000 0001
-1 1000 0001 1111 1110 1111 1111
+0 0000 0000 0000 0000 0000 0000
-0 1000 0000 1111 1111  
备注 第一位是符号位,正数为0,负数为1。 正数不变;负数符号位不变,其余取反。 正数不变;负数在反码的基础上再+1。
取值范围 [-127,127] [-127,127] [-128,127]

 

操作符 描述 运算规则 用途
& 相对应位都为1时,结果为1

1.清零:清零指定位上的数 a &= ~(1<<bitIndex),清零整个数 a &=0

2.取一个数的指定位:判断指定位是否为1 a & (1<<bitIndex) !=0,取后四位 a &=(1<<4) -1

3.判断奇偶:(a & 1) == 0

| 相对应位都为0时,结果为0 1.指定某些位设为1 :a |= (1<<bitIndex)
^ 异或 相对应位相同为0,相异为1(相异为真,非异为假)

1.取反使指定位上的数:a ^= (1<<bitIndex)

2.交换两个数:设 a=0001,b=1010

      a^=b -> a=1011,b=1010

      b^=a -> a=1011,b=0001

      a^=ab -> a=1010,b=0001

~ 取反 0变1,1变0 1.清除指定位上的数:a &= ~(1<<bitIndex)
<< 左移 各二进制位全部左移,高位丢弃,低位补0

1.左移动一位表示*2: a = a<< 1 , 2ⁿ可以用 “1<<n” 表示;

2.生成特定位为1的数:1<<bitIndex

>> 右移 符号位不动,其他二进制位全部右移,负数高位补1,正数高位补0 右移动一位表示/2:a = a>> 1;
>>> 无符号(没有负数)右移 各二进制位全部右移,高位补0

/2

 

posted @ 2021-07-29 19:48  tc小马哥  阅读(61)  评论(0编辑  收藏  举报