Ⅰ 注:数0的补码表示是唯一的: +0的补码=+0的反码=+0的原码=00000000 -0的补码=11111111+1=00000000(mod 2
正数的原码,反码,补码都是一样的,0的原码和反码都有两个,但是0的补码是唯一的。
负数的原码是机器字长的首个数值位为1;反码是原码除首位为1外,其他数值取反,(1变成0,0变成1);补码就是反码再加1。
假设机器字长8位,则
-0的原码1000,0000, -0的反码就是1111,1111,-0的补码就是反码加1后变成1,0000,0000,首位溢出后抛弃,变成-0的补码还是0000,0000。
个人感觉有+0和-0才会出现混乱,数学上的1+(-1)=0,那到计算机里应该是-0还是+0啊,(反正自己没法理解+0和-0),最后只能用补码来进行负数的计算,结果才会正确。
Ⅱ 整数0的补码为什么只有一种形式000……0
0的原码是不惟一的:[+0]原=00000000,[-0]原=10000000
0的反码也是不惟一的:[+0]反=00000000,[-0]反=11111111
与原码和反码不同,0的补码是惟一的,这可由补码的定义得到。对于n=8,有
[+0]补 = [+0]反 = [+0]原 = 00000000
[-0]补 = [-0]反 + 1 = 11111111 + 1 = 00000000(mod 2的8次方)
即对8位字长来讲,最高位的进位(2的8次方)按模256运算被舍掉,所以[+0]补=[-0]补
Ⅲ 补码到底是怎么一回事
在计算机系统中,数值,一律用补码来表示和存储。
补码,实际上,就是一个“代替负数”的【正数】。
使用了补码(正数)之后,在计算机中,就没有负数了。
随之而来的就是:减法运算,也都不存在了。
所以,借助于补码,计算机只需要配置一个加法器,就能走遍天下。
使用补码的目的,也就是:简化计算机的硬件。
---------------------
补码(一个正数),怎么就能代替负数呢?
你看时针:倒拨 3 小时,可以用正拨 9 小时代替吧?
你看三角函数:-π/2、+3π/2,两者的函数值也是相同的吧?
10 进制数,如果限定只用 2 位 ,那么就会有:
25 - 1 = 24
25 + 99 = (一百) 24
如果忽略进位一百(10^2),+99 就可以代替-1。
上面所说的这些正数,就是“负数的补数”。
求补数的公式,你自己可以推出,即:
补数(即正数)= 负数 + 周期。
正数,必须直接参加运算,不可再做任何变换。
就是说:
正数,本身就已经是正数了,它并不存在什么补数。
---------------------
计算机用二进制,补数,那就称为“补码”了。
8 位 2 进制的周期,是:2^8 = 256。
-1 的补码,就是:-1 + 256 = 255 = 1111 1111(二进制)。
-2 的补码是:-2 + 256 = 254 = 1111 1110。
。。。
-128 的补码,就是:128 = 1000 0000。
---------------------
至此,你就可以推出“补码的定义式”:
当 X >= 0, [ X ]补 = X; 零和正数不用变换。
当 X < 0, [ X ]补 = X + 2^n。n 是补码的位数。
这是通用的公式。
---------------------
计算 5 - 7 =-2,用八位补码计算如下:
5=0000 0101
[-7]补码 =1111 1001
--相加-----------
得:(1)1111 1110= [-2]补码
舍弃了进位,结果,就是正确的。
Ⅳ 计算机中的所有数字都是用补码来表示吗
不是,只有有符号数才用补码表示。比如8位有符号数表示范围是-128~127,而无符号数就可以表示0~255。计算机采用补码是为了有符号数中0的表示的唯一性,并且可以把减法转换成加法来运算。除了数字,计算机中还有很多其他的数据,比如说字符等,这些都不用补码表示。
Ⅳ 计算机为什么用补码存储数据
使用补码的好处:
1.
可加法代替减法运算,[a-b]补
=
[a]补+[-b]补
简体了计算机运算硬件电路,提高运算效率:
2.
统一了正0和负0
原码及反码的正0、负0有不同的表示,补码的0是唯一的,
例如字长8位,补码的0表示为唯一的00000000
Ⅵ 为什么在机器数补码中,零的表示是唯一的。
对于(+0)和(-0),在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).
于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在用字节表示时补码中用(-128)代替了(-0),所以用字节表示的补码的范围为:
(-128~0~127)共256个.
注意:(-128)没有相对应的原码和反码。
Ⅶ 请问计算机的补码总为什么0有唯一的补码,即[+0]=[-0]=00000000[-0]不应该不是这样吗
貌似是因为计算机中没有+0和-0的区别。拿8位机举例:如果有正零和负零的区别的话计算机一位的长度只能表示-127~+127共255个数,但是如果把1000,0000即我们认为的-0判断成+128就能多表示一个数。为了功能更强大,所以设计人员让计算机内部就不区别+0,-0所以也就不存在-0这个东东,所以0的补码是唯一的也就是+0的补码.
Ⅷ 计算机为什么用补码存储数据
补码的功能,类似于:
时针倒拨 3 小时,与正拨 9 小时,效果相同。
利用这种思路,计算机中的负数,也可以改为正数(即补码)。
同时,减法运算,也就可以用加法运算代替了。
那么,借助于补码,就能统一加减法,够简化计算机的硬件。
十进制比较容易理解:
25 - 1 = 24
25 + 99 = (一百) 24。
只要忽略进位,+99 就能代替-1。
+99 就称为-1 的补数。
在这里用了 2 位 10 进制。
求补数的算法:补数 = 负数 + 10^2。
通用的公式是:补数 = 负数 + 10^n。n 是位数。
-----------------------
计算机用二进制,补数,就改名为:补码。
一个字节,是 8 位 2 进制。
计数范围是:0000 0000 ~ 1111 1111(十进制 255)。
计数周期是:2^8 = 256。
求补码的算法:负数的补码=负数+2^n。
那么:
-1 的补码=-1 + 256 = 255 = 1111 1111。
-2 的补码=-2 + 256 = 254 = 1111 1110。
。。。
例如,7-2 = 5,用补码计算如下:
7 =0000 0111
[-2] 补 =1111 1110
---相加------------
得:(1)0000 0101= 5
舍弃进位,结果就完全正确。
借助于补码,负数就没有了,从而就把“减法转换为加法运算”。
-----------------------
补码的来源,与原码反码毫无关系。
“原码反码取反加一、符号位也能参加运算”...
这些,都没有什么理论依据。
从“取反加一”来学习补码,就弄不清楚“为什么用补码”。
Ⅸ 为什么“对于真值0,源码有两种不同的表现形式,而补码却只有唯一的一种表现形式.”
0可以是+0,也可以是-0
0的原码为:10000(-0),00000(+0)
+0的补码和原码相同,为00000
-0的补码是在-0的原码(10000)的基础上,符号位不变,其它位按位取反再在低位加1(11111+1=00000),进而得到-0的补码00000
所以补码表示0只有一种情况00000.而原码则表示了两次,分别为10000和00000.
希望可以帮到你,谢谢!