原码与补码的转换

[复制链接]
查看11 | 回复5 | 2019-5-10 09:40:33 | 显示全部楼层 |阅读模式
[-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-5-10 09:40:33 | 显示全部楼层
1、首先要知道,换算规则:原码转换为反码:符号位不变,数值位分别“按位取反” 。2、接着反码转换为原码也是一样,但规则却有不同之处:符号位不变,数值位分别“按位取反”。3、然后就是,原码转换为补码的规则:符号位不变,数值位按位取反,末位再加1。4、最后补码转换为原码:符号位不变,数值位按位取反,末位再加1,即补码的补码等于原码。5、而求补(变补)的换算规则与之前有所差别:符号位和数值位都取反,末位再加1。5
回复

使用道具 举报

千问 | 2019-5-10 09:40:33 | 显示全部楼层
两个说法都没有错,我们举个例子来看看就明白了:1、10001的补码是取反后在再加1,也就是11110+1=11111;2、如果是11111变回原码呢?我们可以采取逆过程先减1,11111-1=11110,再取反变为10001;3、如果要是在补码变原码时先去反再加一呢?(就是问题中的说法)结果为11111先取反为10000,再加1,10000+1=
回复

使用道具 举报

千问 | 2019-5-10 09:40:33 | 显示全部楼层
正数: 原码=反码=补码=该正数。负数: 补码=原码取反+1。原码=补码取反+1。互相转换的方法,是相同的。 注意:符号位不要动,总是 1。另外,码长八位时,-128,只有补码,没有原码。
回复

使用道具 举报

千问 | 2019-5-10 09:40:33 | 显示全部楼层
由原码转换到补码,取反加一,在大部分场合,是可行的。但是,-128 没有原码,用取反加一来求补码,就不行了。同样,由补码求原码,也有-128 的难处。怎么办呢?原码反码取反加一,必须抛弃了。-------------------------通用的公式:负数 X 的补码 = 2^n - | X |负数 X 的绝对值 | X |,当然就是正数了。
回复

使用道具 举报

千问 | 2019-5-10 09:40:33 | 显示全部楼层
源码和宝马的转换应该把宝马转换成源码,这样才有利于别人去看清晰。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行