1 #include<stdio.h> 2 int main(){ 3 int x; 4 scanf("%d",&x); 5 printf("%o",x); 6 }
1.进制特点
(B)二进制:两个数字,逢二进一
(O)八进制:八个数字,逢八进一
(D)十进制:十个数字,逢十进一
(H)十六进制:十六个数字,逢十六进一2.十进制与二进制的转换
2.1对应关系
2.2举例一:二进制1011转换十进制
结果为13 (第三排应该是1101,手打快了有点错误)
当然我们可以直接用8421来计算,方便快速,但是第二行理解了更好,比如我们遇见一下这种情况,8421就不是那么好用了。2.3举例二:二进制10111转换十进制
在数字转换比较多的时候,我们尽可能把下面表格的第二行写出来。
结果为27
2.3举例三:十进制45转换成二进制
方法:除2取余,逆序排列
逆序排列就是从下往上看
则结果为1011012.4举例四:十进制小数0.25转换成二进制
方法:“0.”后乘二取整
0.25 x2 = 0. 5 个位为0
0.5 x 2 = 1 个位为1
从上到下为01,所以十进制小数0.25转换为二进制位0.013.八进制与二进制
3.1对应关系
3.2举例一:八进制56转换为二进制
这个可以看上面对应关系表
结果为101110
3.3举例二:二进制100111010 转换为八进制
这个跟着对应关系就可以知道la
结果为472
4.八进制与十进制
4.1对应关系+举例一:八进制111转换为十进制
示例:
将八进制3574转换为十进制
4.2举例二:十进制64转换为八进制
除8取余,余数由下往上读,因此十进制64转换为八进制的转换结果为100
5.十六进制与十进制
注:类似于八进制转换为十进制
5.1对应关系+举例一:十六进制3333转换为十进制
5.2举例二:十进制64转换为十六进制
除16取余,余数由下往上读,因此十进制64转换为十六进制的转换结果为40
6.十六进制与二进制
6.1对应关系
6.2举例一:十六进制378转换为二进制
,根据上图对应关系,我们可以由下表得出十六进制378转换为二进制的结果为1101111000
6.2举例二:二进制11100101000转换为十六进制
取四合一,以四个数为主,每四个就是一个16进制数。
注:当前面0不够的时候就添0,如下
以上就是我们常用的进制转换,希望可以帮到你,我的可能不足,如果有错误欢迎指出,谢谢!
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
如有转载,请注明出处(如不注明,盗者必究)
算法训练 十进制数转八进制数时间限制:1.0s 内存限制:512.0MB编写函数把一个十进制数输出其对应的八进制数。样例输入9274样例输出220721 #include<stdio.h> 2 int main(){ 3 int x; 4 scanf("%d",&x); 5 printf("%o",x); 6 }
转载于:https://www.cnblogs.com/panweiwei/p/6557411.html
二进制 八进制 十进制 十六进制的转换
1.十进制和二进制的转换
10进制 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10(A) |
11(B) |
12(C) |
13(D) |
2进制 |
1 |
10 |
11 |
100 |
101 |
110 |
111 |
1000 |
1001 |
1010 |
1011 |
1100 |
1101 |
14(E) |
15(F) |
16 |
1110 |
1111 |
10000 |
总结后发现一个问题 就是十进制转二进制的好时候:
2 |
4 |
8 |
16 |
10 (1后面一个零) |
100 |
1000 |
1000 |
2^1 (2的一次方) |
2^2 |
2^3 |
2^4 |
依次类推我相信会很简单吧
32 |
64 |
128 |
256 |
512 |
100000 |
1000000 |
10000000 |
……………… |
……………….. |
2^5 |
2^6 |
2^7 |
2^8 |
2^9 |
7 = 2^2 + 2^1 + 2^0 (十进制的7)
100 +1 0 + 1 = 111 (二进制的111)
那么:二进制转十进制是不是也懂了!
1110(二进制) = 1000 +100 +10 =2^3 + 2^2 + 2^1
=8 + 4 + 2 = 14(十进制)
2. 二进制转八进制和十六进制
二进制转八进制分3位一组
二进制转十六进制分4位一组
二进制 |
10111001 |
11100111 |
八进制 |
10 111 001 (结果:271) |
11 100 111 (结果:347) |
十六进制 |
1011 1001 (结果:B9) |
1110 0111 (结果:E7) |
其中在 十六进制中:
10 |
11 |
12 |
13 |
14 |
15 |
A |
B |
C |
D |
E |
F |
那么十六进制和八进制 转二进制是不是也很简单!
将二进制、八进制、十六进制转换为十进制
二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。
假设当前数字是 N 进制,那么:
对于整数部分,从右往左看,第 i 位的位权等于Ni-1
对于小数部分,恰好相反,要从左往右看,第 j 位的位权为N-j。
更加通俗的理解是,假设一个多位数(由多个数字组成的数)某位上的数字是 1,那么它所表示的数值大小就是该位的位权。
1) 整数部分
例如,将八进制数字 53627 转换成十进制:
53627 = 5×84 + 3×83 + 6×82 + 2×81 + 7×80 = 22423(十进制)
从右往左看,第1位的位权为 80=1,第2位的位权为 81=8,第3位的位权为 82=64,第4位的位权为 83=512,第5位的位权为 84=4096 …… 第n位的位权就为 8n-1。将各个位的数字乘以位权,然后再相加,就得到了十进制形式。
注意,这里我们需要以十进制形式来表示位权。
再如,将十六进制数字 9FA8C 转换成十进制:
9FA8C = 9×164 + 15×163 + 10×162 + 8×161 + 12×160 = 653964(十进制)
从右往左看,第1位的位权为 160=1,第2位的位权为 161=16,第3位的位权为 162=256,第4位的位权为 163=4096,第5位的位权为 164=65536 …… 第n位的位权就为 16n-1。将各个位的数字乘以位权,然后再相加,就得到了十进制形式。
将二进制数字转换成十进制也是类似的道理
11010 = 1×24 + 1×23 + 0×22 + 1×21 + 0×20 = 26(十进制)
从右往左看,第1位的位权为 20=1,第2位的位权为 21=2,第3位的位权为 22=4,第4位的位权为 23=8,第5位的位权为 24=16 …… 第n位的位权就为 2n-1。将各个位的数字乘以位权,然后再相加,就得到了十进制形式。
2) 小数部分
例如,将八进制数字 423.5176 转换成十进制:
423.5176 = 4×82 + 2×81 + 3×80 + 5×8-1 + 1×8-2 + 7×8-3 + 6×8-4 = 275.65576171875(十进制)
小数部分和整数部分相反,要从左往右看,第1位的位权为 8-1=1/8,第2位的位权为 8-2=1/64,第3位的位权为 8-3=1/512,第4位的位权为 8-4=1/4096 …… 第m位的位权就为 8-m。
再如,将二进制数字 1010.1101 转换成十进制:
1010.1101 = 1×23 + 0×22 + 1×21 + 0×20 + 1×2-1 + 1×2-2 + 0×2-3 + 1×2-4 = 10.8125(十进制)
小数部分和整数部分相反,要从左往右看,第1位的位权为 2-1=1/2,第2位的位权为 2-2=1/4,第3位的位权为 2-3=1/8,第4位的位权为 2-4=1/16 …… 第m位的位权就为 2-m。
更多转换成十进制的例子:
将十进制转换为其它进制时比较复杂,整数部分和小数部分的算法不一样,下面我们分别讲解。
1) 整数部分
十进制整数转换为 N 进制整数采用“除 N 取余,逆序排列”法。具体做法是:
把先得到的余数作为 N 进制数的低位数字,后得到的余数作为 N 进制数的高位数字,依次排列起来,就得到了 N 进制数字。
下图演示了将十进制数字 36926 转换成八进制的过程:
从图中得知,十进制数字 36926 转换成八进制的结果为 110076。
下图演示了将十进制数字 42 转换成二进制的过程:
从图中得知,十进制数字 42 转换成二进制的结果为 101010。
2) 小数部分
十进制小数转换成 N 进制小数采用“乘 N 取整,顺序排列”法。具体做法是:
把取出的整数部分按顺序排列起来,先取出的整数作为 N 进制小数的高位数字,后取出的整数作为低位数字,这样就得到了 N 进制小数。
下图演示了将十进制小数 0.930908203125 转换成八进制小数的过程:
从图中得知,十进制小数 0.930908203125 转换成八进制小数的结果为 0.7345。
下图演示了将十进制小数 0.6875 转换成二进制小数的过程:
从图中得知,十进制小数 0.6875 转换成二进制小数的结果为 0.1011。
如果一个数字既包含了整数部分又包含了小数部分,那么将整数部分和小数部分开,分别按照上面的方法完成转换,然后再合并在一起即可。例如:
注意,十进制小数转换成其他进制小数时,结果有可能是一个无限位的小数。请看下面的例子:
其实,任何进制之间的转换都可以使用上面讲到的方法,只不过有时比较麻烦,所以一般针对不同的进制采取不同的方法。将二进制转换为八进制和十六进制时就有非常简洁的方法,反之亦然。
1) 二进制整数和八进制整数之间的转换
二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐。下图演示了如何将二进制整数 1110111100 转换为八进制:
从图中可以看出,二进制整数 1110111100 转换为八进制的结果为 1674。
八进制整数转换为二进制整数时,思路是相反的,每一位八进制数字转换为三位二进制数字,运算的顺序也是从低位向高位依次进行。下图演示了如何将八进制整数 2743 转换为二进制:
从图中可以看出,八进制整数 2743 转换为二进制的结果为 10111100011。
2) 二进制整数和十六进制整数之间的转换
二进制整数转换为十六进制整数时,每四位二进制数字转换为一位十六进制数字,运算的顺序是从低位向高位依次进行,高位不足四位用零补齐。下图演示了如何将二进制整数 10 1101 0101 1100 转换为十六进制:
从图中可以看出,二进制整数 10 1101 0101 1100 转换为十六进制的结果为 2D5C。
十六进制整数转换为二进制整数时,思路是相反的,每一位十六进制数字转换为四位二进制数字,运算的顺序也是从低位向高位依次进行。下图演示了如何将十六进制整数 A5D6 转换为二进制:
从图中可以看出,十六进制整数 A5D6 转换为二进制的结果为 1010 0101 1101 0110。
由于在C语言编程中,二进制、八进制、十六进制之间几乎不会涉及小数的转换,所以这里我们只讲整数的转换,大家学以致用足以。另外,八进制和十六进制之间也极少直接转换,这里我们也不再讲解了。
总结
本节前面两部分讲到的转换方法是通用的,任何进制之间的转换都可以采用,只是有时比较麻烦而已。二进制和八进制、十六进制之间的转换有非常简洁的方法,所以没有采用前面的方法。