本文共 1641 字,大约阅读时间需要 5 分钟。
在计算机中,我们使用补码来表示数字,尤其是负数。这意味着所有数字的二进制表示中,最高位(即最左边的位)为标志位。标志位的值决定了数字的符号:0表示正数,1表示负数。这种统一的表示方式使得加法和减法操作可以统一处理。
补码能够简化加法和减法操作,使得减法可以转化为加法的形式,从而提高计算效率。由于补码的处理统一性,它在计算机中被广泛使用。
以一个字节(8位)为例,分析如何用补码表示负数。
① 如何计算-5的十进制值?
所以,-5在二进制中的补码表示为:1111 1011。
在Java中,位运算以&
(与)、|
(或)、~
(非)、^
(异或)为主要运算符。
与运算(&)
或运算(|)
非运算(~)
异或运算(^)
在Java中,移位运算可以针对整数类型进行。移位后的高位丢弃,低位补零或1,具体取决于移位方向和数值符号。
左移(<<)
右移(>>)
无符号右移(>>>)
int类型占4个字节(32位),其二进制表示方式为:
0000 0000 0000 0000 0000 0000 0000 0000 0000
正数情况:二进制最高位为0,最大的数为:01111111 11111111 11111111 11111111
,对应十进制数值为2^31 - 1
。
负数情况:二进制最高位为1,最小的数为:10000000 00000000 00000000 00000001
,对应十进制数值为-2^31
。
零的表示:二进制下,只有一种表示形式:
0000 0000 0000 0000 0000 0000 0000 0000
1000 0000 0000 0000 0000 0000 0000 0000
这里需要注意:-2^31并不是一个有效的补码,它通过10000000 00000000 00000000 00000001
来表示。
(补充说明:-2^31
的二进制表示为:11111111 11111111 11111111 11111111
,这也是Integer.MIN_VALUE
。)
转载地址:http://qvhtz.baihongyu.com/