原码与补码的转换[-3]反=[10000011]反=11111100 原码 反码负数的补码是将其原码除符号位之外的各位求反之后在末位再加1.[-3]补=[10000011]补=11111101 原码 补码也就是说原码转换成补码是先原码 反码 最后+1成补码.那么补码转换成原码呢?我看了个视频有点迷惑.是怎么说的:由于计算机内部通常用补码来表示二进制数.正数的补码为自身,对于负数来说,需要将补码转换成原码.转换的过程分2步:1.要将这个2进制数所有位反转.2.第二步是在它的末尾加1一个是补码转换成原码,一个是原码转换成补码.到底哪个错了呢?还是都是对的?一个是教学视频第4章 7.整型概述 观看时间为中间 时间不长
原码与补码的转换
[-3]反=[10000011]反=11111100
原码 反码
负数的补码是将其原码除符号位之外的各位求反之后在末位再加1.
[-3]补=[10000011]补=11111101
原码 补码
也就是说原码转换成补码是先原码 反码 最后+1成补码.
那么补码转换成原码呢?我看了个视频有点迷惑.
是怎么说的:
由于计算机内部通常用补码来表示二进制数.
正数的补码为自身,对于负数来说,需要将补码转换成原码.
转换的过程分2步:
1.要将这个2进制数所有位反转.
2.第二步是在它的末尾加1
一个是补码转换成原码,一个是原码转换成补码.
到底哪个错了呢?还是都是对的?
一个是教学视频
第4章 7.整型概述 观看时间为中间 时间不长
两个说法都没有错,我们举个例子来看看就明白了:
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)是一个道理.
所以问题中的说法没有错误.