java整形数值表示---补码的由来

 java整形数值表示--基础 中说明了符号数采用补码表示法带来的优势,可是并无说明补码是如何推导过来的。java

假设整形数值最多8位数,当采用无符号数表示法时,数值范围为0~255,而采用有符号数表示法时,可将128-255映射为-128~-1,而0-127保持不变,来表示数值范围-128~127:spa

128=1000_0000~-128.net

129=1000_0001~-127blog

130=1000_0010~-126get

...基础

255=1111_1111~-1二进制

0=0000_0000~0方法

1=0000_0001~1ps

....tar

127=0111_1111~127

实际上这种方法叫作补码表示法,例如给定一个负数-100须要获得它的补码须要将255-100+1=156~1001_1100。直观看来首位只要为1即为负数,而0则为正数,但不能简单的认为首位是符号位:

例如假设要表示-5~4之间的10个数,能够用0~9之间的5~9来表示-5~-1,而0~4保持不变,即:

5~-5

6~-4

7~-3

8~-2

9~-1

0~0

1~1

2~2

3~3

4~4

所以首位大于等于5的表示负数,而小于等于4的表示正数。这也说明了对于二进制而言,千万不要简单的将首位理解为符号位。

相关文章
相关标签/搜索