Java中的位移运算

首先说一下二进制:计算机都是以二进制方式进行运算的,即 0 和 1(分别表示通电和断电,也叫高电平和低电平)。

一个字节由8个bit构成,即: 1字节 = 8bit3d

上图中的灰色部分即为符号位

bit的最高位为符号位,0表示正数,1表示负数。code

下面看一下二进制的原码、反码和补码。cdn

  1. 二进制的最高位是符号位,0表示正数,1表示负数
  2. 正数的原码、反码和补码都同样。
  3. 负数的反码:符号位不变,其他位取反。
  4. 负数的补码:反码 + 1
  5. 0的反码和补码都是0。
  6. Java中没有无符号数。
  7. 计算机都是以补码的方式进行运算的。

Java中的四个运算符:&|^~

  1. 按位与&: 两位全位1,则结果为1.
  2. 按位或| : 两位有一个为1,则结果为1.
  3. 按位异或 ^ : 两位一个为0,一个为1,则结果为1.
  4. 按位取反~ : 0->1, 1->0

位移运算符:>>、>>>、<<

  1. 算术左移<<:低位溢出,符号位不变,并用符号位补溢出的高位(正数用0补充,负数用1补充)。
  2. 算术右移>>:符号位不变,低位补0
  3. 逻辑右移>>>:低位溢出,高位补0

注:左侧为高位,右侧为低位blog

相关文章
相关标签/搜索