在搞懂<>、>>>之前,我们需要先了解二进制中的源码、反码、补码...

二进制中的原码、反码、补码

有符号数:

对于有符号数而言,符号的正、负机器是无法识别的,但由于“正、负”恰好是两种截然不同的状态,如果用“0”表示“正”,用“1”表示“负”,这样符号也被数字化了,并且规定将它放在有效数字的前面,即组成了有符号数。所以,在二进制中使用最高位(第一位)来表示符号,最高位是0,表示正数;最高位是1,表示负数。

100000000000000001111100

无符号数:

无符号数是针对二进制来讲的,无符号数的表数范围是非负数。全部二进制均代表数值(所有位都用于表示数的大小),没有符号位。即第一个"0"或"1"不表示正负

000000000000000001111100

对于有符号数而言的性质:

(1)二进制的最高位是符号位:0表示正数,1表示负数

(2)正数的原码、反码、补码都一样

(3)负数的反码 = 它的原码符号位不变,其他位取反(0 ->1 ; 1->0 )

(4)负数的补码 = 它的反码 +1

(5)0的反码、补码都是0

(6)在计算机运算的时候,都是以补码的方式来运算的

有符号数运算案例

正数相加:

例如:1+1 ,在计算机中运算如下:

1的原码为: 00000000 00000000 00000000 00000001

反码: 00000000 00000000 00000000 00000001

补码: 00000000 00000000 00000000 00000001

两数的补码相加: 00000000 00000000 00000000 00000010( 转换为10进制) = 2

正数相减:

例如:1 - 2,在计算机中运算如下:

在计算机中减运算其实是作为加运算来操作的,所以,1-2 = 1 + ( -2 )

第一步:获取1的补码 00000000 00000000 00000000 00000001

第二步:获取-2的补码

-2的原码:10000000 00000000 00000000 00000010

-2的反码:11111111 11111111 11111111 11111101

-2的补码: 11111111 11111111 11111111 11111110

第三步:1的补码与-2的补码相加:

00000000 00000000 00000000 00000001

+ 11111111 11111111 11111111 11111110

= 11111111 11111111 11111111 11111111


第四步:将计算结果的补码转换为原码,反其道而行之即可(如果想将二进制转换为十进制,必须得到二进制的原码)

补码:11111111 11111111 11111111 11111111

=

反码:11111111 11111111 11111111 11111110

=

原码:10000000 00000000 00000000 00000001

第五步:将计算结果的二进制原码 转换 为十进制

二进制原码:10000000 00000000 00000000 00000001 = -1

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

<< 左移.........