进制转换
2019-01-28 本文已影响0人
silasjs
各进制的编程表示
//编程中默认就是十进制
int num = 12;
printf("十进制:%i\n", num);
//在编程中表示二进制,需要在数字前加上0b
int num1 = 0b1100;
printf("十进制:%i\n", num1);
//在编程中表示八进制,需要在数字前面加上0
int num2 = 014;
printf("十进制:%i\n", num2);
//在编程中表示十六进制,需要在前面加上0x
int num3 = 0xc;
printf("十进制:%i\n", num3);
//通过八进制的形式输出12
//%o就是以八进制的方式输出
printf("八进制:%o\n", num);
//通过十六进制的形式输出12
printf("十六进制:%x\n", num);
N位二进制数的取值范围:0 ~ 2(n) - 1
- 1位:0 ~ 1 取值范围:0 ~ 2(1) - 1
- 2位:0 ~ 3 取值范围: 0 ~ 2(2) - 1
- 3位:0 ~ 7 取值范围:0 ~ 2(3) - 1
- 4位:0 ~ 15 取值范围:0 ~ 2(4) - 1
计算规律
- 十制转其他进制:用需要转换的十进制数除以目标进制数,所得余数继续除以目标进制数,最后倒取余。
18 -> 十进制转十六进制
18 / 16 = 1 余 2
1 / 16 = 0 余 1
int num1 = 0x12;
printf("十进制转十六进制:%i\n", num1);
18 -> 十进制转八进制
18 / 8 = 2 余 2
2 / 8 = 0 余 2
int num2 = 022;
printf("十进制转八进制:%i\n", num2);
18 -> 十进制转二进制
18 / 2 = 9 余 0
9 / 2 = 4 余 1
4 / 2 = 2 余 0
2 / 2 = 1 余 0
1 / 2 = 0 余 1
int num3 = 0b10010;
printf("十进制转二进制:%i\n", num3);
- 其他进制转十进制:从低位数开始,用低位数乘以目标进制数的次幂,幂数从0开始,然后相加之合。
10010 -> 二进制转十进制
0 * 2(0) + 1 * 2(1) + 0 * 2(2) + 0 * 2(3) + 1 * 2(4)
0 + 2 + 0 + 0 + 16
2 + 16 = 18
22 -> 八进制转十进制
2 * 8(0) + 2 * 8(1)
2 + 16 = 18
12 -> 十六进制转十进制
2 * 16(0) + 1 * 16(1)
2 + 16 = 18
- 二进制转八进制:从低位开始,每三位二进制转成十进制,最后结果拼接起来。
- 因为三位数的二进制数的取值范围和一位八进制数的取值范围一样。
00 001 001
1 1 = 011
00 011 011
3 3 = 033
- 二进制转十六进制:从低位开始,每四位二进制转成十进制,最后结果拼接起来。
- 因为四位数的二进制数的取值范围和一位十六进制数的取值范围一样。
0001 1011
1 b = 0x1b