文章目录
1. 进制
十六进制(Hexadecimal)
十进制(Decimal)
八进制(Octal)
二进制(Binary)
示例
2. 进制转换表
3. 十六进制与二进制转换
4. 十进制与二进制的转换
5. 十进制与十六进制的转换
6. 在C语言中表示进制
1. 进制
计算机对数据的表示方式有多种进制,包括十六进制、十进制、八进制和二进制。
十六进制(Hexadecimal)
- 表示形式:0xA 或 AH
- 进制系统:逢十六进一
- 组成:每一位由0到F组成,分别表示0到15的数值
- 习惯用0x前缀表示或用H后缀表示
十进制(Decimal)
- 表示形式:10 或 10D
- 进制系统:逢十进一
- 组成:每一位由0到9组成
- 前缀无特殊表示方式,或用D后缀表示
八进制(Octal)
- 表示形式:012 或 120
- 进制系统:逢八进一
- 组成:每一位由0到7组成
- 习惯用0前缀表示,或用O后缀表示(注意:数字零0或字母O)
二进制(Binary)
- 表示形式:0b1010 或 1010B
- 进制系统:逢二进一
- 组成:每一位由0或1组成
- 习惯用0b前缀表示或用B后缀表示
示例
十六进制:0xA 或 AH
- 0xA 表示十进制的10。
- 0xF 表示十进制的15。
十进制:10 或 10D
- 10 表示十进制的10。
- 15D 表示十进制的15。
八进制:012 或 120
- 012 表示十进制的10。
- 017 表示十进制的15。
二进制:0b1010 或 1010B
- 0b1010 表示十进制的10。
- 0b1111 表示十进制的15。
2. 进制转换表
以下是一个进制转换表,展示了二进制、八进制、十进制和十六进制之间的转换关系。
二进制 (Binary) | 八进制 (Octal) | 十进制 (Decimal) | 十六进制 (Hexadecimal) |
---|---|---|---|
0000 | 0 | 0 | 0 |
0001 | 1 | 1 | 1 |
0010 | 2 | 2 | 2 |
0011 | 3 | 3 | 3 |
0100 | 4 | 4 | 4 |
0101 | 5 | 5 | 5 |
0110 | 6 | 6 | 6 |
0111 | 7 | 7 | 7 |
1000 | 10 | 8 | 8 |
1001 | 11 | 9 | 9 |
1010 | 12 | 10 | A |
1011 | 13 | 11 | B |
1100 | 14 | 12 | C |
1101 | 15 | 13 | D |
1110 | 16 | 14 | E |
1111 | 17 | 15 | F |
3. 十六进制与二进制转换
在嵌入式开发中,经常需要对十六进制与二进制进行转换。
二进制转换为十六进制
步骤:
- 将二进制数从右到左每四位分成一组。
- 每组二进制数转换为对应的十六进制数。
示例: 将二进制数 0b01101110101
转换为十六进制数。
-
从右到左每四位分组:
011 0111 0101
-
补全不足的四位(在左边补0):
0011 0111 0101
-
转换每组二进制数为十六进制:
0011 -> 3 0111 -> 7 0101 -> 5
最终得到十六进制数为
0x375
。
十六进制转换为二进制
步骤:将十六进制数从右到左每位转换为对应的四位二进制数。
示例: 将十六进制数 0xABC1
转换为二进制数。
1. 从右到左每位十六进制数转换为四位二进制数:
A -> 1010
B -> 1011
C -> 1100
1 -> 0001
2. 拼接所有二进制数:
1010 1011 1100 0001
4. 十进制与二进制的转换
十进制转换为二进制
步骤:
- 使用除2取余法,直到商为0。
- 将余数逆序排列。
示例: 将十进制数 45
转换为二进制数。
- 56 ÷ 2 = 28 余 0
- 28 ÷ 2 = 14 余 0
- 14 ÷ 2 = 7 余 0
- 7 ÷ 2 = 3 余 1
- 3 ÷ 2 = 1 余 1
- 1 ÷ 2 = 0 余 1
将余数逆序排列,得到:111000
二进制转换为十进制
步骤:将二进制数从右到左,按位展开,每位乘以对应的2的幂次方,然后求和。
示例: 将二进制数 101101
转换为十进制数。
从右到左计算:
- 最右边的0,对应的是 0× 2^0 = 0
- 倒数第二位0,对应的是 0× 2^1 = 0
- 倒数第三位0,对应的是 0× 2^2 = 0
- 倒数第四位1,对应的是 1× 2^3 = 8
- 倒数第五位1,对应的是 1× 2^4 = 16
- 最左边的1,对应的是 1× 2^5 = 32
将这些结果相加: 0+0+0+8+16+32=56
因此,二进制数 111000
转换回十进制数是 56
。
5. 十进制与十六进制的转换
十进制转换为十六进制
步骤:
- 使用除16取余法,直到商为0。
- 将余数逆序排列。
示例: 将十进制数 175
转换为十六进制数。
- 175 ÷ 16 = 10 余 15 (F)
- 10 ÷ 16 = 0 余 10 (A)
逆序排列余数:AF
结果:175
的十六进制表示为 0xAF
。
十六进制转换为十进制
步骤:将十六进制数从右到左,按位展开,每位乘以对应的16的幂次方,然后求和。
示例: 将十六进制数 0xAF
转换为十进制数。
- A× 16^1 + F×16^0
- 10×16+15×1
- 160+15=175
结果:0xAF
的十进制表示为 175
。
6. 在C语言中表示进制
十进制表示
十进制是默认的数字表示方式。在C语言中,直接写出数字就是十进制。
int decimal = 56;
printf("%d\n", decimal); // 输出:56
二进制表示
C语言标准没有直接提供二进制文字表示的方法,但可以通过一些方式实现,比如宏定义或使用标准库。
#include <stdio.h>// 宏定义二进制常量
#define BIN(x) 0b##xint main() {int binary = BIN(111000);printf("%d\n", binary); // 输出:56return 0;
}
八进制表示
八进制数字以 0
开头。在C语言中,前缀 0
表示八进制数。
int octal = 070;
printf("%o\n", octal); // 输出:70
printf("%d\n", octal); // 输出:56
十六进制表示
十六进制数字以 0x
或 0X
开头。在C语言中,前缀 0x
表示十六进制数。
int hex = 0x38;
printf("%x\n", hex); // 输出:38
printf("%d\n", hex); // 输出:56