(一)
先说一说进制的表示
1. 十进制
十进制表示其实就是我们平时用的数字系统,就像大家一直用的普通话一样,谁都懂!如“117”就是表示十进制的“117”。不过,有时候让你用别的进制来表示数字,就像是让你开着手推车在高速公路上行驶一样,随时都有可能翻车!
2. 十六进制
0x...或0X...后面加上数字表示16进制,这个规矩真是有点小玄妙!因为16进制中的“10”无法与“1”“0”区分,所以“9”以后的用字母表示,“10”用‘A’或‘a’表示,以此类推,“15”用‘F’或‘f’表示。这就像是开启了一个密码谜题,如果你不知道这个规则,就会像一只小羊跟在大羊群后面傻傻地走,被“10”和“A”这样的字母绊倒!
“%d”是指以十进制输出
printf("%d\n", 0x1A); // 输出十进制 26
printf("%d\n", 0X1f); // 输出十进制 31
printf("%d\n", 0x12); // 输出十进制 18
printf("%d\n", 0X12); // 输出十进制 18
printf("%d\n", 12); // 输出十进制 12
3. 八进制
0...后面加上数字表示8进制
将八进制的数字以十进制输出
printf("%d\n", 012); // 输出十进制 10
4. 二进制
0b...后面加上数字表示二进制
将二进制的数字以十进制输出
printf("%d\n", 0b1001); // 输出十进制 9
(二)
接下来说一说进制的输出
这里先说明一下,目前还没有二进制的输出格式,因此如果想要输出二进制,只能自己编写一个函数
1.“%x”或“%X”表示以十六进制的格式输出,这两种方式的区别就是“%x”输出时表示数字的字母和前导都是小写,“%X”则是大写。
将八进制的数字以十六进制输出
printf("%x\n", 032); // 输出十六进制 1a
printf("%X\n", 032); // 输出十六进制 1A
这里并没有显示前导,在输出格式列表加上‘#’就可以显示前导了
将八进制的数字以十六进制输出
printf("%#x\n", 032); // 输出十六进制 0x1a
printf("%#X\n", 032); // 输出十六进制 0X1A
2."%o"表示以八进制的格式输出
将十六进制以八进制输出
printf("%#o\n", 0x1a); // 输出八进制 032
printf("%#o\n", 0x1A); // 输出八进制 032
printf("%#o\n", 0X1a); // 输出八进制 032
printf("%#o\n", 0X1A); // 输出八进制 032
(三)
另外说一下输出ASCALL码对应的字符
1.输出格式中“/...”后面加上数字表示输出该八进制转换为十进制的ASCALL码对应的字符
printf("\31\n"); // 对应的十进制是 25,对应的ASCALL码是 ↓,因此输出 ↓
这里再说一下,对应转换成的十进制数字不能超过255,否则会出错,但我们一般无法输出128及以后对应的ASCALL字符,这里顺便讲讲解决这个问题的一个方法
①包含头文件 #include
②在main函数里写上一下语句:
SetConsoleOutputCP(437);
8进制中只有0到7这8个数字,所以如果你在后面加了8或者9这样的数字,系统就会认为你是在给自己设陷阱!总之,你闲着没事想写Bug,谁也拦不住你。
printf("\2718888\n"); // 输出 ╣8888,\271对应的ASCALL码是╣,后面的8888原样打印
2.输出格式中“/x...”后面加上数字表示输出该十六进制转换为十进制的ASCALL码对应的字符
不能用“/X...”这种输出格式输出该十六进制转换为十进制的ASCALL码对应的字符
printf("\x2a\n"); // 输出 *
printf("\x2A\n"); // 输出 *
同理,对应转换成的十进制数字不能超过255,否则会出错