进制及其转换
常见进制类型
我们日常生活中用的大多是10进制很少见到二进制,八进制,十六进制。而在编程中却比较常常听说,但有时还是以10进制为主,我们说机器识别二进制,但是二进制是不能直接从我们的编译器直接输出的。我们的2进制8进制和16进制实际上只是规定满多少进位的标准,2进制为满二进1,8进制满8进1,16进制满16进1,有必要补充一下的是由于阿拉伯数字只有10个即0-9所以在16进制中10-15分别用a-f代替(大小写均可)。
进制应用
在vs2022(只是本人使用的为vs2022,如果有其他编译器小伙伴也可以自行尝试)中我们可以输入一个十进制数如25,让其转化为8进制和16进制的数,如代码:
1 |
|
输出结果应该为
那么我们可不可以将直接输入其他进制转化为10进制呢?肯定是可以的。我们可以直接将数值以8进制和16进制,其中8进制赋值必须以0开头,而16进制必须以0x开头,输出时必须也要是整形输出即%d,如下代码:
1 |
|
以下为输出结果:
这时候就要注意了,在c语言中时不能直接输入和输出2进制转化的。编译器不能直接转化2进制。赋值时不要直接写2进制!!!赋值时不要直接写2进制!!!赋值时不要直接写2进制!!!
进制的转化
让电脑帮我们算进制并不难,那么我们自己该如何去实现进制转换呢。
首先我们来说2进制:除2反序取余法。
我们来探究一下46转化成2进制时怎样的。如下图:
最左侧为除数,因为是2进制所以除的是2 ,46/2余数为0,23余数为1依次递推,到最后剩下1或0时结束,并把1或0直接放到余数位。如我的最后剩1直接到余数位,此时得到的2进制是由余数倒序排列而成,我们可以来验算一下,这里我用微软的程序员计算器验算,如图:
介绍一下,hex是转化为16进制显示,dec即为10进制,oct为8进制,bin为2进制显示,这里结果与我们计算结果相同,只是它默认8位前面的用0补全空位了。
而我们的8进制和16进制也是同理,用除8反序取余和除16反序取余就可以了。可以看看下面的表格,如表:
| 10进制 | 2进制 | 8进制 | 16进制 |
|---|---|---|---|
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 3 | 3 |
| 4 | 100 | 4 | 4 |
| 5 | 101 | 5 | 5 |
| 6 | 110 | 6 | 6 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
| 16 | 1 0000 | 20 | 10 |
可以很直观看出4者的进制差距,并且我们可以观察到他们的共同处:2进制进第4位,8进制进一位;8进制进2位,16进制进1位。这是由于他们的进位成倍数关系导致,这个规律可以邮箱提高进制之间转化而不必每次都要转化为10进制再转化为其他进制。
资料参考
b站的黑马程序员









