程序设计
数据的表示
进制转换
进制 | 说明 | 举例 | 基数 | 位权 |
---|---|---|---|---|
二进制(B) | 只有0和1两个数字 | 1011 | 2 | 2的K次方 |
八进制 | 以0开头,包含0-7的数字 | 076 | 8 | 8的K次方 |
十进制(D) | 以0-9十个数字为基础 | 123 | 10 | 10的K次方 |
十六进制(H) | 以0x或0X开头,包含0-9和A-F的数字 | 0x1A | 16 | 16的K次方 |
- 权展开法解析
- 二进制100010101 转 十进制
$100010101_2 = 1*2^8 + 0*2^7 + 0*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 256 + 16 + 4 + 1 = 277$
- 二进制100010101 转 十进制
- 十进制转二进制使用短除法(除基取余法)
2|23 余 1
2|11 余 1
2|5 余 1
2|2 余 0
23 转 R : 1110
- 二进制转8 / 16进制
//8进制
R: 10_001_110
8: 2 1 6
//16进制
R:1000_1110
16: 8 E
码制(原码/反码/补码/移码)
- 原码:二进制表示的数值,最高位表示符号位,0表示正数,1表示负数
- 反码:正数的反码与原码相同,负数的反码是符号位不变,其余位取反
- 补码:正数的补码与原码相同,负数的补码是其反码加1
- 移码:补码的符号位按位取反;阶码的移码表示,移码=阶码+偏移量,偏移量为2^(n-1)-1,n为阶码位数
** 进制计算中,1-1 实际为 1+(-1) **
码制 | 数值1 | 数值-1 | 1-1 【实际为:1+(-1)】 |
---|---|---|---|
原码 | 0000 0001 | 1000 0001 | 1000 0010 (值:-2) |
反码 | 0000 0001 | 1111 1110 | 1111 1111 (值:-0) |
补码 | 0000 0001 | 1111 1111 | 0000 0000 (值: 0) |
移码 | 1000 0001 | 0111 1111 | 1000 0000 (移码的加减运算和常规不同,较为特殊) |
计算机计算过程中,使用补码来进行计算
码制 | 定点整数 | 定点小数 | 数码个数 |
---|---|---|---|
原码 | -(2^(n-1) - 1) ~ + (2^(n-1) - 1) | 2^n -1 | |
反码 | -(2^(n-1) - 1) ~ + (2^(n-1) - 1) | 1111 1110 | 2^n -1 |
补码 | -2^(n-1) ~ + (2^(n-1) -1) | 1111 1111 | 2^n |
移码 | -2^(n-1) ~ + (2^(n-1) -1) | 0111 1111 | 2^n-1 |
浮点数的表示
单精度浮点数(32位)
- 符号位(S):0表示正数,1表示负数
- 阶码(E):8位,用移码表示,范围是-127~128
- 尾数(M):23位,二进制小数,范围是[1,2)-1
- 数值范围:±(1+M)*2^(E-127)
- 例子:-0.75的单精度浮点数表示
- 符号位:1
- 原码:0.75的二进制表示为0.11
- 移码:-0.11
- 阶码:127-1=126,移码表示为0111 1110
- 补码:1 0111 1110
- 最终表示:1 0111 1110 1000 0000 0000 0000 0000 0000
双精度浮点数(64位)
- 符号位(S):0表示正数,1表示负数
- 阶码(E):11位,用移码表示,范围是-1023~1024
- 尾数(M):52位,二进制小数,范围是[1,2)-1
- 数值范围:±(1+M)*2^(E-1023)
- 例子:-0.75的双精度浮点数表示
- 符号位:1
- 原码:0.75的二进制表示为0.11
- 移码:-0.11
- 阶码:1023-1=1022,移码表示为0111 1111 1101
- 补码:1 0111 1111 1101
- 最终表示:1 0111 1111 1101 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
逻辑运算
- 与(&):两个操作数都为真时,结果才为真
- 或(|):两个操作数中有一个为真时,结果就为真
- 非(!):操作数为真时,结果为假;操作数为假时,结果为真
- 异或(^):两个操作数不相同时,结果为真;两个操作数相同时,结果为假