例如,假设初始值为:
0100 0011
这在十六进制中是什么?如果使用二的补码,它在十进制中是什么?
同样,如果使用补码,十六进制和十进制是什么?
更一般地说,如何计算出这两种二进制表示形式的十六进制和十进制值?
发布于 2009-12-05 22:50:31
十六进制很简单。只需分成4位组,并将每组转换为十进制。然后,很明显,用A替换10,用B替换11,用C替换12,用D替换13,用E替换14,用F替换15。十六进制表示通常不关心一个或两个补码,而只是准确地反映位。
至于转换成小数:根据是一还是二的补码,计算出符号和绝对值是什么。如果第一位是0,它是正的,如果它是1,它是负的。
正值不需要进一步修改。负值的绝对值取决于它是一或二的补值。一个人的补码就是取反的比特(0变成1,1变成0)。对于二的补码,减去1,然后取反这些位。
然后将绝对值中设置为1的位的值相加。每个位的值是两个指数递增的连续幂,从最右侧的2^0 (=1)开始,向左侧递增。
以下是维基百科的一些参考资料:
发布于 2009-12-05 22:51:45
在Ruby中:
将二进制转换为十六进制:
> '01000011'.to_i(2).to_s(16)
=> "13"将二进制转换为十进制:
> '01000011'.to_i(2).to_s(10)
=> "19"如果设置了顶部位,则需要减去2**(位数)。
对于一个人的补码,如果设置了最高位,则需要减去2**(位数),然后添加1。
发布于 2009-12-05 22:55:37
我不知道你的问题对不对,但是
十进制的01000011等于67,十六进制的01000011等于43
而十六进制和十进制的0100是4,而十六进制和十进制的0011 =3
关于转换的解释可以在这里找到:http://www.permadi.com/tutorial/numBinToDec/
https://stackoverflow.com/questions/1852314
复制相似问题