java中整数如何表示_在Java中,整数在内部是如何表示的?

让我们从总结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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值