正数的原码反码补码到底是不是一样的?
C语言里正数的原码反码补码是一样的。
符号位是0,原码,反码,补码:00001010;
补码是为负数想出来的办法,目的是减法可以用加补码的方法实现。补码可用反码加陆闭1得来,于是又有了负数的反码。
计算机里有硬件“加法器”,有了补码,减法也可以用加法器做了。计算机里运算速度,硬件远快于软件,这是做出反码,补码和原码的原因。
扩展资料
1、原码的优点
简单直观,例如:用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011;
原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中。
2、原码的缺点
例:00000001+10000001=10000010,换算成十进制为-2。显然出错了。
所以原码的符号位不能直接参与运算,必须和其他位分开,这笑悉吵就增加了硬件碰侍的开销和复杂性。
参考资料来源:百度百科—反码
在计算机中,负数以“其正值迹盯神的补码形式姿亏”表示。
计算机,并不使用原码和反码。
在使用了补码之后,计算机就没有负数了,也没有了减法运算。
那么,计算机只需配置一个加法器,便可横行天下了!
正数,它已经就是正数!
零和正数,不用变换,也不许变换,必须直接进行计算。
所以则扒,正数,根本就没有“任何码”。
另外,计算机中,也没有原码和反码。
相同、不相同?
讨论这个,哪有什么意义!
在计算机系统中,数值,一律采用【补码】表示和存储。
原码和反码,都是无用的。 在计算机中,也不保存它们。
因此,人们也不必关心它们。
它们一样,或不一样,都没有任何关系,不必纠结。
虽然,计算机用是二进制数。
但是,进行数学计算时,二进制数、十进制数,并没有本质的区别。
十进制数中,有补数,二进制数中,有补码。
它们,都是雷同的。
其实,所谓的补码,并不是什么什么码,它们也是数。
你就看十进制吧。
当你忽略了进位,+99,能代替-缓橡1:
● 27 + 99 = (进位 1) 26,
● 27 - 1 = 26。
当你舍弃了进位,正数,就能当负数、加法,就能完成减法运算。
在计算机中,虽然用的是二进制,也同样有这样的规律。
只要舍弃了进位,计算机中,就没有了负数和减法运算。
所以,计算机,只需配置一个加法器,便可横行天下!
-------------------
什么是补数? 99、1,又是什么关系?
若两数之和,运掘为 10、100、1000 ... 10^n,这两个数,就是【互为补数】。
如:4 和 6、88 和 12、455 和 545 等等,就互为补数。
99、1,显然也是互为补数。
------
对于二进制数来说,若两数之和,为 2^n,也就是互为补数了。
八位二进制的进位,是 2^8 = 256 = 1 0000 0000 (二进制)。
那么,1 和 255、2 和 254、...、128 和 128,都是互为补数的关系。
-------------------
补数,又有什么用呢?
在前面已经证明,在十进制时:-1,就可以用 +99 代替。
同样道理,在二进制时:-1 就可以用 255 (1111 1111) 代替。
其它的:-2 用 1111 1110、-3 用 1111 1101、、、代替即可。
这些代替负数的正数,就是计算机专家发明的“补码”了。
其实,“补码”,并不是什么什么码,它也是正常的数值。
而且,“补码”和什么“机器数符号位原码反码取反加一”,并无任何关系。
所谓的:[ X ]补 + [ Y ]补 = [ X + Y ]补,也不过是故弄玄虚而已。
关键的问题是:舍弃进位! 他们却没有认真的强调一下。
------
其实扰悄旁,进位、舍弃进位、补数,这些都是小学算术中的概念。
计算机专家如果好好的上个小学,就一定不会编造那些无聊的概念了。