为什么c语言负数是以补码形式存放的?

 我来答
做而论道
高能答主

2022-05-14 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3.1万
采纳率:82%
帮助的人:8444万
展开全部

计算机的硬件,只有加法器。

负数、减法,都必须用加法来完成。

你看十进制:

  24 - 1 = 23

  24 + 99 = (一百) 23

舍弃进位,+99 可以当做-1 进行运算。

+99 就是-1 的补数。

补数(补码),就是一个“代替负数进行运算的正数”。

对于 2 位 10 进制数,求补数的公式:

  补数=负数+10^2。

计算机中,用二进制,就称为补码。

对于 8 位 2 进制数,求补码的公式:

  补码=负数+2^8。

-1 的补码是:-1 + 256 = 255 = 1111 1111。


-2 的补码是:-2 + 256 = 254 = 1111 1110。

。。。

-128 的补码是:128 = 1000 0000。

求补码,不要用“原码取反加一”。

那个方法,是无法求出-128 的补码的。

而且,你也不能理解补码的意义。

---------------------

为什么 C 语言负数是以补码形式存放的?

借助于补码,就统一了加减法,硬件就得以简化。

创作者5dDoleST86
2019-04-10 · TA获得超过2.9万个赞
知道小有建树答主
回答量:1.2万
采纳率:32%
帮助的人:942万
展开全部
以-1和+1相加为例子。
一个字节,如果是负数,它是255,如果是正数,它是
-1。
255+1
=
256(1,0000,0000)
-1+1
=
0(0,0000,0000)
因为加到256后并不会真的进位,而是把op置位。所以整负数相加的问题很多地方都可以不去理会了。不用真正去区分正负了,只要依据最后需要的类型去处理结果就可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式