数制与编码
- 二进制:(1010001010010)2 1010001010010B
- 八进制:(1652)8 1652O(这是大写字母O,不是数字0)
- 十进制:(1652)10 1652D
- 十六进制:(1652)16 1652H 0x1652
二进制:B Binary
八进制:O Octal
十进制:D Decimal
十六进制:H Hex 学过前端CSS的能知道颜色值的HEX写法就是16进制
相互转换
二进制-->八进制:
二进制-->十六进制:
r进制-->十进制:
- 用表示r进制数的第i位数字
- i是从小数点那里开始往前数,比如1234的4就是
- 小数点后面的i是负数,但是是从1开始,比如1234.5的5是
- 十进制正数 = ,负数同理
-
- 也可以使用表格法,第一行写r进制每一位的权值,第二行对应每位数字
- 上下两行两两相乘最后求和就是所转化的十进制数
- 可参考下面的二进制转十进制
-
无符号数和有符号数
无符号数
- 寄存器的位数决定了无符号数的表示范围。如8位寄存器,无符号数的表示范围就是
0000000
~1111111
, 0
~255
- 用无符号数字表示主存地址
- 8位无符号数的范围: 0~28-1 = 0~255
- 16位无符号数的范围: 0~216-1 = 0~65535
有符号数
原反补移码
原反补移码的作用
- 原码更便于人类理解
- 反码作为计算机运算的中间量
- 补码更便于计算机运算
- 移码常用来表示浮点数的阶码,只能表示整数
符号位+数值位 = 8位(如果是8位计算机)
整数的补码和移码符号位相反,数值位相同
写法:
- 原码:[x]原 = 1,0010011
- 反码:[x]反 = 1,1101100
- 补码:[x]补 = 1,1101101
- 移码:[x]移 = 0,1101101
有补码的原因:
如果一个数+1,二进制原码是00000001
,其负数-1的原码是10000001
正常来说+1 + (-1) = 0
但是两个原码之和等于10000010
显然不对
所以可以用原码表示正数但不能表示负数
相关转换
常用的一些数值:
| 原码 | 反码 | 补码 | 移码 |
---|
+1 | 0000 0001 | 0000 0001 | 0000 0001 | 1000 0001 |
-1 | 1000 0001 | 1111 1110 | 1111 1111 | 0111 1111 |
0 | 0000 0000 | 0000 0000 | 0000 0000 | 0000 0000 |
-0(等同于-128) | | | 1000 0000 | 0000 0000 |
+127 | 0111 1111 | 0111 1111 | 0111 1111 | 1111 1111 |
-128 | 无 | 无 | 1000 0000 | 0000 0000 |
错题集

答案与解析:
答案: C
解析:
8位二进制数可以表示28=256种不同的数据,但是原码中0占用了两个数据,所以8位的原码只能表示255个不同的数据
反码同原码也是255种,但补码和移码可以有256种

答案与解析:
答案: A
解析:
N位的二进制小数可以表示的数的个数为1+20+21+...+2N-1 = 2N
N位的十进制小数可以表示的个数为10N
2N / 10N = (0.2)N

答案与解析:
答案: C
解析:
负数的绝对值最大,所以除了第一位(符号位)剩下63位的真值最大
但这是补码,所以要找真值最小的,也就是000000...01(62个0),这样转化出来的原码才能使63个1,也就是1111...11(63个1),

答案与解析:
答案: B
解析:
[0]补=00000
[0]移=24+0=10000
所以B错, 表示不同,但表示形式是唯一的(指补码只有00000表示0,移码只有10000表示0)
对于A,补码转移码需要符号位取反,表示数字的始终一样,所以表示范围一样(C选项)

答案与解析:
答案: C
解析:
使用补码表示时,若符号位相同,则数值位越大码值越大
补码第一位为1,所以原码符号位为1,即为负数(参考原码转补码方法)
要大于-32,所以x1-x6的部分要小于32(注意这里是补码,需要转成原码小于32)
答案有x1=0或者1两种,
先假设x1=0
如果都是0,原码为1000000 不存在
如果至少有一个1,原码x1处要被反转为1,所以原码可能为1100000=-32([x]补=1010000)
如果x1=1
如果其他都是0,[x]补=1100000=1100000原=-64
如果至少有一个为1,最小时原码为1010000=-16([x]补=1110000)
所以x1=1,其他至少有一个1

答案与解析:
答案: D
解析:
x为正数时显然x*=x,但除此之外0*=0,0不是正数
题目是当且仅当,所以不能选B
C显然不对,C都不对了A更不可能对,所以选D