C语言基础之进制之间的转换
每次写博客都是因为遇到了不开心的事情(好想射点什么——LOL),今天被老大问到有符号整型二进制数在内存中怎么样表示,对于我这个半路出家,基础不扎实的菜鸟来说简直是懵逼中的懵逼。。。唉,整理一下吧!
有符号数是针对二进制来讲的,用最高位作为符号位。“+”用0表示,“-”用1表示。其他的数位代表数值。还有好多相关的概念,我也不是很懂(原谅我这个菜鸟吧),所以就没有写出来误导大家。
进制转换开始喽~~~
10进制转换成2进制
例如10进制数83 转换成2进制数:
83/2 商41余1
41/2 商20余1
20/2 商10余0
10/2 商5余0
5/2 商2余1
2/2 商1余0
1/2 商0余1
把余数倒排 就得到2进制数 1010011
10进制转换成8进制
例如10进制数91转换成8进制数:
91/8 商11余3
11/8 商1 余3
1/8 商0 余1
把余数倒排 就得到8进制数 133
10进制转换成16进制
例如10进制数51转换成16进制数:
51/16 商3余3
3/16 商0余3
把余数倒排 就得到16进制数 33
2进制转换成10进制 (下面括号里的表示幂运算,注意下)
例如2进制数10110110转换成10进制数:
观察2进制数,有1的表示有值即:
2(1)+2(2)+2(4)+2(5)+2(7)=2+4+16+32+128=182
所以10进制数是182
2进制转换成8进制
例如2进制数11010101转换成8进制数:
从左往右 3个一组分好 最后填0补位 即:
011 010 101
然后分别运算:
2(0)+2(1) 2(1) 2(0)+2(2)
3 2 5
所以转换成8进制数为 325
2进制转换成16进制
例如2进制数101011011转换成16进制数:
从左往右 4个一组分好 最后填0补位 即:
0001 0101 1011
然后分别运算:
2(0) 2(0)+2(2) 2(0)+2(1)+2(3)
1 5 11(B)
所以转换成16进制数为 15B
8进制转换成2进制
例如8进制数35转换成2进制数:
把8进制数 35 分开来计算 即:
3 5
3/2 商1 余1
1/2 商0 余1
5/2 商2 余1
2/2 商1 余0
1/2 商0 余1
所以转换成2进制数为:11101
16进制转换成2进制
例如16进制数14A转换成2进制数:
将14A分开来计算 即:
1 4 A(10)
1/2 商0 余 1 1
4/2 商2 余 0
2/2 商1 余 0
1/2 商0 余 1 100
10/2 商5余0
5/2 商2 余1
2/2 商1 余0
1/2 商0 余1 1010
所以转换成2进制数为:11001010 是不是不对了?别忘记原来2进制转换成16进制是怎么分的组 有没有填0补位 这个一定要注意!!!
0001 0100 1010
所以正确答案是101001010
记得回头看看8进制转换成2进制 是不是也有这个问题?
还有其他的转换,我习惯就是把他们先转换成2进制 然后再转换成其他进制
我的原创,我的理解,希望大神们多批评指导我这个菜鸟~~~