Java常用的二进制位操作(左移、右移、无符号右移、加法、减法)

符号位

最高位的bit代表符号位,0为正数、1为负,剩余的31bits则代表数字部分

负数的表述

对于负数而言(绝对值取反码再加一,此即为补码),是以补码的形式存储在内存中的。以-7(int)为例

  • 将-7的绝对值转化为二进制:
    0000 0000 0000 0000 0000 0000 0000 0111
  • 将上面的二进制以反码表示:
    1111 1111 1111 1111 1111 1111 1111 1000
  • 转化为补码:
    1111 1111 1111 1111 1111 1111 1111 1001

右移和无符号右移

  • 在执行右移>>操作时,若参与运算的数字为正数,则在高位补0;若为负数,则在高位补1。
  • 无符号右移>>>则不同,无论参与运算的数字为正数或为负数,在执运算时,都会在高位补0。

左移

在执行左移<<操作时,没有有符号和无符号的区别,都是在低位补0。

加法

  • 不进位加法其实就是一个异或操作
  • 进位加法其实就是一个与操作的结果左移一位

猜你喜欢

转载自blog.csdn.net/HalfImmortal/article/details/107139345