java中的负数的问题

在计算机中是使用二制数中的最高位表示来正负。 二进制的储存中都是用的补码,正数的原码、反码和补码相同,负数的原码是最高位为1,反码最高位不变,其余各位取反,补码为其反码+1(重要!!)

首先得知道最高位是哪一位?1个字节的类型,如字符类型,最高位是第7位,2个字节的数,最高位是第15位,4个字节的数,最高位是第31位。

不同长度的数值类型,其最高位也就不同,但总是最左边的那位(如下示意)。

字符类型固定是1个字节,所以最高位总是第7位。 (红色为最高位) 单字节数: 1111 1111  双字节数: 1111 1111 1111 1111  四字节数: 1111 1111 1111 1111 1111 1111 1111 1111  当我们指定一个数量是无符号类型时,那么其最高位的1或0,和其它位一样,用来表示该数的大小。  当我们指定一个数量是有符号类型时,此时,最高数称为“符号位”。为1时,表示该数为负值,为0时表示为正值

问:6的反码为什么是-7?

答:
java整型是32bit运算

6的二进制是:
0000 0000 0000 0000 0000 0000 0000 0110
反码是:
1111 1111 1111 1111 1111 1111 1111 1001 是个负数,因此计算机存放的时候是先反码:
1111 1111 1111 1111 1111 1111 1111 0110
再加1:
1111 1111 1111 1111 1111 1111 1111 0111

所以答案是: -7



在计算机中,

负数

除为最高位为

1

以外,还采用补码形式进行表达。

原文地址:https://www.cnblogs.com/qq1871707128/p/6055256.html