1.2 进位计数制及其转换
n进制数,以十进制为例,
(N)10 = 1234.56
(N)2 = 1103+2102+3101+4100+510-1+610-2
以上式子叫做按权展开式。二进制、八进制等与之类似。展开式所得结果即为十进制。
1.2.1 各进制数的表示
通常,
十进制数在数字的右下角标注10或D,
二进制数在数字的右下角标注2或B,
八进制数在数字的右下角标注8或O,但在C语言中是在数的前面加上数字0
十六进制在数字的右下角标注16或H,但在C语言中是在数的前面加上数字0X或0x
1.2.2 进制转换
- 十进制转换为二进制(转化为其他进制同理,将基数改为对应的即可,如八进制就是8)
- 整数部分不断除基数2,并记下余数,直到商为0为止。然后将余数倒过来拼接即为二进制数的整数部分。
- 小数部分不断乘基数2,并记下整数部分,直到结果的小数部分为0或达到一定精度为止。然后将整数部分顺次拼接即为二进制数的小数部分。
- 二进制<->八进制
二转八:
- 将二进制数的每三位数分一组,不足3位的,小数点前的在左边补0,小数点后的在右边补0,直到补满3位。
- 对每组按权展开式计算结果,结果拼接即为八进制数。
八转二:
- 将每位八进制数用3位二进制数表示即可(通过除2法)。
- 二进制<->十六进制
操作同二八转换,只是分组时按照4位一组。发现了吗,23=8,24=16,因为具有2的指数整数倍的关系,因而可以直接进行转换。
- 任意进制转换
如(135)7 = (75)10 = (203)2
即,非上述进制转换,需先按权展开后得到十进制数,在进行对应转换。
1.3 机器数的表示形式及其表示范围
1.3.1 真值与机器数
- 真值:直接用“+”和“-”来表示符号的二进制数。
- 机器数:把一个数连通其符号在内在及其中的表示加以数值化。一般用最高有效为来表示数的符号,正数用0表示,负数用1表示。如 01011为二进制正数+1011。11011为二进制负数-1011。
1.3.2 原码
也称“符号-数值表示”。第一位表示符号位,正数为0,负数为1,其余各位表示数值部分。
在原码表示中,有两种不同形式的0,即:
在反码表示中,有两种不同形式的0,即:
在补码表示中,0的表示形式是唯一的,即:
[N1+N2]补 = [N1]补 + [N2]补
- [N1-N2]补 = [N1]补 + [-N2]补
- 如果符号位产生进位,则将其舍弃。
-
1.3.6 无符号整数
在某些情况下,要处理的数全是整数,此时再保留符号位就没有意义了,可以把最高位也作为树脂处理,这样的数成为无符号数。
16位无符号数的表示范围是[0,65535]
-
1.3.7 字符表示法
计算机中的字符包括以下几种类型:
字母
- 数字
- 专用字符:+,-,*,/,↑,SP(space 空格),…
- 非打印字符
这些字符在机器里必须用二进制数来表示。计算机常采用美国信息交换标准代码(American Standard Code for Information Interchange,ASCII)来表示。这种代码用1个字节(8位二进制码)来表示一个字符,其中低7位为字符的ASCII值,最高位一般用作校验位。
1.4 二进制数的位运算
1.4.1 与运算(AND)
又称为逻辑乘,可用符号“·”或“∧”来表示,C语言中用“&”来表示。如有A、B两个逻辑变量,可能有的取值情况只有4种。
都取1才为1
A | B | A&B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
1.4.2 或运算(OR)
又称为逻辑加,可用符号“+”或“∨”来表示,C语言中用“|”来表示。如有A、B两个逻辑变量,可能有的取值情况只有4种。
任一为1就为1
A | B | A|B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
1.4.3 非运算(NOT)
又称为逻辑反,C语言中用“~”来表示。
A | ~A |
---|---|
1 | 0 |
0 | 1 |
1.4.4 异或运算(XOR)
“异或”运算可用符号“⊕ ”来表示,C语言中用“^”来表示。如有A、B两个逻辑变量,可能有的取值情况只有4种。
取值不同才为1
A | B | A^B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |