0

1) 我知道当您将二进制转换为十进制时,最左边的位代表 0、1...等等。因此,例如将 0001 转换为十进制,它是 0*2^0+0*2^1+0*2^2+1*2^3,所以十进制值为 8。

2)例如,当您签署了十六进制 0x80 时,它将被转换为二进制 1000 0000 但是为了计算这个二进制表示的十进制值,它是有符号的,所以我们必须反转 7 位所以我们得到 1111111 并加 1 这给了我们10000000 即 -128。

我的问题是为什么在第二种情况下,当我们计算有符号字节的小数时,我们必须从最右边的位开始为 0,所以我们有 ....+1*2^8。对于第二种情况,为什么 2^0 不是我们在 1) 中计算的最左边的位?

谢谢。

4

2 回答 2

4

不,通常二进制表示另一种方式... 0001 是 1,1000 是 8。

于 2010-11-08T04:42:29.547 回答
2

我回答第 1 点,不完全是。0001实际上是1while 1000is 8。你似乎来自错误的一端。二进制数1101,例如将是:

+------ 1 * 2^3     =  8
|+----- 1 * 2^2     =  4
||+---- 0 * 2^1     =  0
|||+--- 1 * 2^0     =  1
||||                  --
1101                = 13

对于第 2 点,将位模式转换为有符号数的最简单方法是先将其转换为无符号值 ( 0x80 = 128),然后减去偏差(8 位为 256,16 位为 65536,依此类推)得到 -128 .

偏差应该只影响过程结束时的计算,这是一种将范围映射0..255-128..1270..65535的方法-32768..32767

于 2010-11-08T04:44:37.087 回答