让我们从总结Java原始数据类型开始:
字节:字节数据类型是8位有符号二进制补码整数。
Short:短数据类型是16位有符号二进制补码整数。
int:Int数据类型是32位有符号二进制补码整数。
long:长数据类型是64位有符号二进制补码整数。
float:float数据类型是单精度32位IEEE 754浮点。
double:double数据类型是双精度64位IEEE 754浮点。
boolean:boolean数据类型表示一位信息。
char:char数据类型是一个单一的16位Unicode字符。
二补
“好的例子是从wiki,通过注意256 = 255 1实现与二的补码的关系,并且(255-x)是x的1的补码
0000 0111 = 7二进制补码是1111 1001 = -7
它的工作方式是msb(最高有效位)接收一个负值,所以在上面的情况
-7 = 1001= -8 + 0+ 0+ 1
正整数通常存储为简单的二进制数(1为1,10为2,11为3等等)。
负整数存储为其绝对值的二的补码。正数的二进制补码当使用此符号时为负数。
由于我收到几个点的答案,我决定添加更多的信息。
更详细的答案:
其中有四种主要方法来表示二进制的正数和负数,即:
>签名的幅度
>一个补
>二补
>偏差
签名的幅度
使用最高有效位表示符号,其余位用于表示绝对值。其中0表示正数,1表示负数,示例:
1011 = -3
0011 = +3
这种表示更简单。但是,您不能以与添加十进制数相同的方式添加二进制数,从而难以在硬件级别实现。此外,该方法使用两个二进制模式来表示0,100 … 0和0 … 0。
一个补充
在该表示中,我们反转给定数字的所有位以找出其互补。举个例子:
010 = 2, so -2 = 101 (inverting all bits).
这种表示的问题是仍然存在两个位模式来表示0(00..0和11..1)
二的补
为了找到数字的负数,在该表示中,我们反转所有的位,然后添加一个位。添加一位解决了具有表示0的两位模式的问题。在该表示中,我们只有一个(00 … 0)。
例如,我们想要找到使用4位的4(十进制)的二进制负表示。首先我们将4转换为二进制:
4 = 0100
然后我们反转所有的位
0100 -> 1011
最后我们添加一位
1011 + 1 = 1100.
因此,如果我们使用具有4位的二进制补码二进制表示,则1100等价于十进制中的-4。
找到互补的更快的方式是通过固定作为值1的第一位和反转剩余的位。在上面的例子中会是这样:
0100 -> 1100
^^
||-(fixing this value)
|--(inverting this one)
二的互补表示,除了只有一个表示为0,它也添加两个二进制值,以相同的方式,在十进制,即使数字具有不同的符号。然而,有必要检查溢出情况。
4.偏差
该表示法用于表示浮点数的IEEE 754范数中的指数。其优点是所有位为零的二进制值表示最小值。并且所有位为1的二进制值表示最大值。如名称所示,以二进制编码(正或负)值,其中n位具有偏差(通常为2 ^(n-1)或2 ^(n-1)-1)。
因此,如果我们使用8位,则十进制中的值1以二进制表示,使用2 ^(n-1)的偏差,值为:
+1 + bias = +1 + 2^(8-1) = 1 + 128 = 129
converting to binary
1000 0001