首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算一和二的补码二进制表示的十进制值和十六进制值?

如何计算一和二的补码二进制表示的十进制值和十六进制值?
EN

Stack Overflow用户
提问于 2009-12-05 22:19:08
回答 3查看 22.3K关注 0票数 0

例如,假设初始值为:

0100 0011

这在十六进制中是什么?如果使用二的补码,它在十进制中是什么?

同样,如果使用补码,十六进制和十进制是什么?

更一般地说,如何计算出这两种二进制表示形式的十六进制和十进制值?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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)开始,向左侧递增。

以下是维基百科的一些参考资料:

票数 3
EN

Stack Overflow用户

发布于 2009-12-05 22:51:45

在Ruby中:

将二进制转换为十六进制:

代码语言:javascript
复制
> '01000011'.to_i(2).to_s(16)
=> "13"

将二进制转换为十进制:

代码语言:javascript
复制
> '01000011'.to_i(2).to_s(10)
=> "19"

如果设置了顶部位,则需要减去2**(位数)。

对于一个人的补码,如果设置了最高位,则需要减去2**(位数),然后添加1。

票数 1
EN

Stack Overflow用户

发布于 2009-12-05 22:55:37

我不知道你的问题对不对,但是

十进制的01000011等于67,十六进制的01000011等于43

而十六进制和十进制的0100是4,而十六进制和十进制的0011 =3

关于转换的解释可以在这里找到:http://www.permadi.com/tutorial/numBinToDec/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1852314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档