首先说一下二进制:计算机都是以二进制方式进行运算的,即 0 和 1(分别表示通电和断电,也叫高电平和低电平)。
一个字节由8个bit构成,即: 1字节 = 8bit
bit的最高位为符号位,0
表示正数,1
表示负数。
下面看一下二进制的原码、反码和补码。
- 二进制的最高位是符号位,0表示正数,1表示负数
- 正数的原码、反码和补码都一样。
- 负数的反码:符号位不变,其余位取反。
- 负数的补码:反码 + 1
- 0的反码和补码都是0。
- Java中没有无符号数。
- 计算机都是以补码的方式进行运算的。
Java中的四个运算符:&
、|
、^
和 ~
- 按位与
&
: 两位全位1,则结果为1. - 按位或
|
: 两位有一个为1,则结果为1. - 按位异或
^
: 两位一个为0,一个为1,则结果为1. - 按位取反
~
: 0->1, 1->0
位移运算符:>>、>>>、<<
- 算术左移
<<
:低位溢出,符号位不变,并用符号位补溢出的高位(正数用0补充,负数用1补充)。 - 算术右移
>>
:符号位不变,低位补0 - 逻辑右移
>>>
:低位溢出,高位补0
注:左侧为高位,右侧为低位