原码与补码的转换
[-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。整型概述 观看时间为中间 时间不长 展开
原码 反码
负数的补码是将其原码除符号位之外的各位求反之后在末位再加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。整型概述 观看时间为中间 时间不长 展开
8个回答
展开全部
两个说法都没有错,我们举个例子来看看就明白了:
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)是一个道理。
所以问题中的说法没有错误。
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)是一个道理。
所以问题中的说法没有错误。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
正数: 原码=反码=补码=该正数。
负数:
补码=原码取反+1。
原码=补码取反+1。
互相转换的方法,是相同的。
注意:符号位不要动,总是 1。
另外,码长八位时,-128,只有补码,没有原码。
负数:
补码=原码取反+1。
原码=补码取反+1。
互相转换的方法,是相同的。
注意:符号位不要动,总是 1。
另外,码长八位时,-128,只有补码,没有原码。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
由原码转换到补码,取反加一,在大部分场合,是可行的。
但是,-128 没有原码,用取反加一来求补码,就不行了。
同样,由补码求原码,也有-128 的难处。
怎么办呢?
原码反码取反加一,必须抛弃了。
-------------------------
通用的公式:负数 X 的补码 = 2^n - | X |
负数 X 的绝对值 | X |,当然就是正数了。
就是“由负数相反的数”来算出“负数的补码”。
其实,这是很简单的! 减一取反,即可。
比如: |-128 | = 1000 0000(二进制)。
减一,得:0111 1111。
取反,即:1000 1111,这就是 [-128]补!
又如: |-9 | = 0000 1001(二进制)。
减一,得:0000 1000。
取反,即:1111 0111,这就是 [-9 ]补!
--------------------------
“减一取反”,这方法,百试百灵的。
完全不需要使用“原码反码”这些不完善的码制。
而且,由已知的“负数补码”转换为“正数补码”,也可以用这个方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
源码和宝马的转换应该把宝马转换成源码,这样才有利于别人去看清晰。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询