首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么从9位模式100000000中减去一个负8位值会给出震级?

为什么从9位模式100000000中减去一个负8位值会给出震级?
EN

Stack Overflow用户
提问于 2016-11-07 22:17:53
回答 3查看 681关注 0票数 0

我的教科书为这两种符号整数的补码方法提供了以下解释:

我们将讨论这个方法,因为它适用于一个1字节的值。在这种情况下,值0到127由最后7位表示,高阶位设置为0。到目前为止,这和符号大小法是一样的。此外,如果高阶位为1,则值为负数.区别在于确定这个负数的值。从9位模式100000000 (256个以二进制表示)中减去一个负数的位模式,结果是值的大小。

这些对我来说都没有任何意义。典型的处理器使用八位字节(8位字节).从9位字节中减去8位字节意味着什么?

EN

回答 3

Stack Overflow用户

发布于 2016-11-07 22:27:45

基本上,为了有效计算,您希望有相同的运算(加法、减法等)。以同样的方式执行,不管是什么符号。因此,首先,考虑无符号字节的情况。

使用8位,可以表示0-255之间的任何值。加法和减法的工作方式和往常一样(模块256),一切都很好。

现在,想象一下,当你在127岁的时候,递增1会给你-128。我们仍然在计算模数256,但前128位数字已经移动了256。现在,让我们检查加法: 10 + (-5) = 10 + 251 (无符号)= 261 =5(模255)。

一切都如期而至。所以,在我们的新表示中,-128是127 + 1,是01111111 +1,是10000000。-1是11111111。希望我能帮上忙。

票数 2
EN

Stack Overflow用户

发布于 2016-11-07 22:52:18

你有一个字节(8位数字,每个数字是0或1)

2的补码通过查看第一个数字来工作。

代码语言:javascript
复制
10010011
^ this one

如果是0,那么这个数字是正数,您可以继续正常地将二进制转换为十进制。

如果是1,那么它是阴性的。通常转换它(bin(10010011) = 147),然后减去256 (147 - 256 = -109),这就是你的2的补码。

票数 1
EN

Stack Overflow用户

发布于 2016-11-07 22:50:53

我对两个补语的记忆说:

“翻转位加一”

实际上,以下数字为负数:

代码语言:javascript
复制
int i, j= 127;
i = (~j)+1;
printf ("%d\n",i); // prints -127
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40475693

复制
相关文章

相似问题

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