原码与补码的转换

[-3]反=[10000011]反=11111100原码反码负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。[-3]补=[10000011]补=1111110... [-3]反=[10000011]反=11111100
原码 反码
负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。
[-3]补=[10000011]补=11111101
原码 补码

也就是说原码转换成补码是先原码 反码 最后+1成补码。
那么补码转换成原码呢?我看了个视频有点迷惑。

是怎么说的:
由于计算机内部通常用补码来表示二进制数。
正数的补码为自身,对于负数来说,需要将补码转换成原码。
转换的过程分2步:
1。要将这个2进制数所有位反转。
2。第二步是在它的末尾加1
一个是补码转换成原码,一个是原码转换成补码。
到底哪个错了呢?还是都是对的?
方式都是一样的。一个是csdn的讨论贴http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763105791214f03dc252bd7a7443e82cf5f93130716017ba2f974734713d3b23e3d43b84828adab6065367520b09fcd8b48cabb967e729f26423646c61641850eafcf1d73d621e65eedaa1bf3ffad72c5a1c5a2a84320b944740997808b4d7115dd1ff6033093b1e838022f17adec4072895e605de93431c5508d96256f779680db4b3fb53da16106e0df22b14e05c514b36e113332a15bc77b462740f73f22e8343b13e3eb4a905a6e4153a138b4aeb0bcfc3e8dcb9c428ffbbbb85f957796cefd8871550722&p=8b2a945e8c8013f70cbd9b7d0e51&user=baidu 百度快照方式的。
一个是教学视频
http://ftp5-idc.pconline.com.cn/pub/download/ftpdown/pcsoft/pcedu/video/fanlei/c++/4/c007.html
第4章 7。整型概述 观看时间为中间 时间不长
展开
 我来答
挖土吃土
2019-05-10 · TA获得超过8518个赞
知道答主
回答量:153
采纳率:0%
帮助的人:2.2万
展开全部

1、首先要知道,换算规则:原码转换为反码:符号位不变,数值位分别“按位取反” 。

2、接着反码转换为原码也是一样,但规则却有不同之处:符号位不变,数值位分别“按位取反”。

3、然后就是,原码转换为补码的规则:符号位不变,数值位按位取反,末位再加1。

4、最后补码转换为原码:符号位不变,数值位按位取反,末位再加1,即补码的补码等于原码。

5、而求补(变补)的换算规则与之前有所差别:符号位和数值位都取反,末位再加1。

上海巴鲁图工程机械科技有限公司_
2022-05-15 广告
正数的原码就是其本身,负数的原码需要在其首加上一个1 正数的补码和原码相同,负数的补码是各位取反末位加1 例如:0110 1100 原码是:0110 1100 补码是:0110 1100 -0110 1100 原码是:1110 ... 点击进入详情页
本回答由上海巴鲁图工程机械科技有限公司_提供
lanve12
推荐于2017-12-15 · TA获得超过958个赞
知道答主
回答量:136
采纳率:0%
帮助的人:69.9万
展开全部
两个说法都没有错,我们举个例子来看看就明白了:
1、10001的补码是取反后在再加1,也就是11110+1=11111;
2、如果是11111变回原码呢?我们可以采取逆过程先减1,11111-1=11110,再取反变为10001;
3、如果要是在补码变原码时先去反再加一呢?(就是问题中的说法)结果为11111先取反为10000,再加1,10000+1=10001。这个结果与2是一样的,并且也是和1中的原码相吻合。
通过上述例子可以看出,无论是原码变补码还是补码变原码,都可以采取先取反再加1的方法。至于原因是很容易想通的。
按照正常思维来想的话,补码变成原码应该是原码变补码的逆过程,也就是2步中的方法。但是我们可以思考一下,如果我们没有按照2步中的方法而是先去取反了呢?先取反得到的结果和2步的结果有什么差异呢?答案是差了1,2步中是先减1才取的反,而直接取反的话,就没有减1。
接着请注意,在取反前减1和在取反后加1的效果是一样的。这就和-3-1=-(3+1)是一个道理。
所以问题中的说法没有错误。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沙里波特
2021-08-15 · TA获得超过5245个赞
知道大有可为答主
回答量:1.1万
采纳率:100%
帮助的人:625万
展开全部
正数: 原码=反码=补码=该正数。
负数:
  补码=原码取反+1。
  原码=补码取反+1。
  互相转换的方法,是相同的。
  注意:符号位不要动,总是 1。
另外,码长八位时,-128,只有补码,没有原码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2022-03-13 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部

由原码转换到补码,取反加一,在大部分场合,是可行的。

但是,-128 没有原码,用取反加一来求补码,就不行了。

同样,由补码求原码,也有-128 的难处。

怎么办呢?

原码反码取反加一,必须抛弃了。

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

通用的公式:负数 X 的补码 = 2^n - | X |

负数 X 的绝对值 | X |,当然就是正数了。

就是“由负数相反的数”来算出“负数的补码”。

其实,这是很简单的! 减一取反,即可。

比如: |-128 | = 1000 0000(二进制)。

减一,得:0111 1111。

取反,即:1000 1111,这就是 [-128]补!

又如: |-9 | = 0000 1001(二进制)。

减一,得:0000 1000。

取反,即:1111 0111,这就是 [-9 ]补!

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

“减一取反”,这方法,百试百灵的。

完全不需要使用“原码反码”这些不完善的码制。

而且,由已知的“负数补码”转换为“正数补码”,也可以用这个方法。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
超级挺你继续那些年想你
2019-12-21 · TA获得超过7497个赞
知道大有可为答主
回答量:3万
采纳率:55%
帮助的人:1235万
展开全部
源码和宝马的转换应该把宝马转换成源码,这样才有利于别人去看清晰。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式