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)中计算第二种情况?
感谢。
答案 0 :(得分:4)
不,通常二进制是以另一种方式表示的...... 0001是1,1000是8。
答案 1 :(得分:2)
我回答第1点,并不完全。 0001
实际上是1
,而1000
是8
。你似乎来自错误的一端。二进制数1101
例如是:
+------ 1 * 2^3 = 8
|+----- 1 * 2^2 = 4
||+---- 0 * 2^1 = 0
|||+--- 1 * 2^0 = 1
|||| --
1101 = 13
对于第2点,将位模式转换为带符号数的最简单方法是首先将其转换为无符号值(0x80 = 128
),然后减去偏差(256为得到-128的8位,65536为16位等等。
偏差应该只影响流程结束时的计算,这是将范围0..255
映射到-128..127
或0..65535
到-32768..32767
的方法。< / p>