无符号数顾名思义也就是不带符号的数
若机器字长为8位,无符号数的表示范围 0~2^8-1 , 即0~255
✪ 有符号数(0表示正号,1表示负号)
① 小数表示:如(符号位与数字位用.(点)表示)
+0.1101在机器中表示为 0.0101
- 0.0110在机器中表示为 1.00110
②整数表示:如(符号位与数字位用,(逗号)表示)
+1101 在机器中表示为 0,1101
- 1101 在机器中表示为 1,1101
0表示正号,1表示负号,这样把符号数字化得数成为机器数,把带“+”,“-”的数称为真值
若机器字长为8位,有符号数的表示范围 -2^8- 1 2^8-1 , 即-256~255
✪ 原码 ✪
计算机中最简单的表示方式,符号位+真值位表示
0,10011 1,1001 0,0000 1,11111 这都是可以表示原码
✪ 反码 ✪
正数反码:等于原码 。 如:0,0010的反码还是为0,0010
负数反码:符号位不变,数值位与原码数值位相反。如1,1010的反码为1,0101
✪ 补码 ✪
正数补码:等于原码 。 如:0,0010的补码还是为0,0010
负数补码:符号位不变,反码的数值位+1。
负数补码如1,1010的反码为1,0101,然后反码数值位加1求补码
方法二:补码用公式法怎么来求
例题:当X= -1001时,【X】补是多少?
解析 :由题意知n=4
[X]补 = 2^n+1 + X = 2^5 - 1001=1,0 0000 -1001 = 1,0011
但是在反求真实值X的时候发现按公式得
X [X]补 - 2^n+1 = 1,0011 - 1,0 0000 = 0,0011 = +0011 ≠ -1001**
所以当反求真实值X时用这个公式妥妥的 补码真实值 = 2^n+1 - 补码,算出之后,真实值符号变相反 ,n为真值位数!!
那上面那道例题来说:
解析: X= 2^n+1 - [X]补 =2^5-1,0011=1,0 0000 - 1,0011 = 001101(前面的0舍去)=0,1101,符号位在变相反即1,1101
✪ 移码 ✪
当真值用补码表示时,由于符号位和数值部分一起编码,由于计算机无法分辨“,”逗号,所以人们很难从补码的形式上辨别其大小,例如:0,1010和1,1010,显而易见前者大于后者,而从代码形式上,会作为5位二进制代码比较,即01010<11010,其实恰恰相反;所以,有了移码
移码定义:
n 表示整数位数,x是指真值(带符号位的数)
例题1:如 X=+10100,则X的移码是多少?
解析:题意可知n=5
[X]移=2^5 + 10100 = 1,10100 (用逗号将符号位和数值位分隔开)
例题2:如 X= - 10100,则X的移码是多少?
解析:题意可知n=5
[X]移=2^5 - 10100 = 0,01100 (用逗号将符号位和数值位分隔开)
✪ 0的原反补移码
0有+0 和 -0 之分
假设 [+0]原=0,000 则 [+0]反=0,000 [+0]补=0,001 [+0]移=2^3+0=1,000
假设 [- 0]原=1,000 则 [- 0]反=1,111 [ -0]补=0,001 [- 0]移=2^3 -0=1,000
所以的补码和移码是唯一的
✪ 习题练习
1.若寄存器内容为1111 1111,若它等于+127,则为()
A、原码
B、补码
C、反码
D、移码
我的答案:D
解析:
A.若为原码,则它等于1,1111111= -(2^7-1)= -127
B.若为补码,则它原码为1,0000001= - 1
C.若为反码,则它原码为1,0000000= - 0
D.若为移码,移码=真实值 + 2^(n-1),这里n=8,所以真实值=移码 - 2 ^7=1111 1111-1000 0000=0,111 1111=+127
2.若寄存器内容为0000 0000,若它等于-128,则为()
A、原码
B、补码
C、反码
D、移码
我的答案:D
解析:
A.若为原码,则它等于0,0000000= +0
B.若为补码,则它原码为0,000 0000= +0或1,000 0000 = -0,由于0的补码只有一个,即为0
(补码另一种方法(公式法):真实值= 2^n - 补码,这里n=8,真实值=2 ^8 - 补码=1 0000 0000 - 0000 0000=1 0000 0000(前面的1舍去)为0,000 0000, 符号位在变相反即为1,000 0000 = -0)
C.若为反码,则它原码为0,1111111= +127
D.若为移码,移码=真实值 +2^(n-1),这里n=8,所以真实值=移码 - 2 ^7=0000 0000-1000 0000=1,1000 0000= - 128
3.若寄存器内容为1111 1111,若它等于-1,则为()
A、原码
B、补码
C、反码
D、移码
我的答案:B
解析:
A.若为原码,则它等于1,111 1111=-127
B.若为补码,则它原码为1,0000001= - 1
(补码另一种方法(公式法):真实值= 2^n - 补码,这里n=8,真实值=2 ^8 - 补码=1 0000 0000 - 1111 1111=0 0000 0001(前面的0舍去)为0,000 0001, 符号位在变相反即为1,000 0001 = -1)
C.若为反码,则它原码为1,000 000= -0
D.若为移码,移码=真实值 + 2^(n-1),这里n=8,所以真实值=移码 - 2 ^7=1111 1111-1000 0000=0,111 1111=+127
4.若寄存器内容为1000 0000,若它等于-0,则为()
A、原码
B、补码
C、反码
D、移码
我的答案:A
解析:
A.若为原码,则它等于1,000 0000=- 0
B.若为补码,则它原码为1,000 0000= -0
C.若为反码,则它原码为1,111 1111= - 127
D.若为移码,移码=真实值 + 2^(n-1),这里n=8,所以真实值=移码 - 2 ^7=1000 0000-1000 0000=0,000 0000=+0
5.在机器数( )中,零的表示形式是唯一的。
A、原码
B、补码
C、补码和反码
D、原码和反码
我的答案:B
✪ 习题小总结:
① 移码 = 真实值 +2^(n-1), n为存储空间长度(即机器数的长度,并非真值长度,机器数的长度比真值长度多1)
② 补码 = 真实值 + 2^n(当真值是负整数时,n为存储空间长度(即机器数的长度)
③ 补码真实值 = 2^n - 补码,算出之后,真实值符号变相反 ,n为存储空间长度(即机器数的长度)!!
④ 0表示正号,1表示负号,这样把符号数字化得数成为机器数,把带“+”,“-”的数称为真值