c语言二进制与十六进制之间转换(C语言-二进制八进制)
c语言二进制与十六进制之间转换(C语言-二进制八进制)1÷2=0余12÷2=1余016÷2=8余08÷2=4余04÷2=2余0
①十进制(正整数)转二进制
除2取余,倒序排列,高位补0
66÷2=33余0
33÷2=16余1
16÷2=8余0
8÷2=4余0
4÷2=2余0
2÷2=1余0
1÷2=0余1
倒序1000010
66对应二进制01000010
~
②十进制(小数)转二进制
乘2取整
0.66×2=1.32取整1
0.32×2=0.64取整0
0.64×2=1.28取整1
0.28×2=0.56取整0
0.56×2=1.12取整1
0.12×2=0.24取整0
0.24×2=0.48取整0
0.48×2=0.96取整0
顺序取8位精度
0.66对应二进制0.10101000
~
③二进制转十进制(整数)
依次乘2的n次方,再求和
01000010对应
2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
0×2^0=0
1×2^1=2
0×2^2=0
0×2^3=0
0×2^4=0
0×2^5=0
1×2^6=64
0×2^7=0
求和得:二进制对应十进制为66
~
④二进制转十进制(小数)
依次乘2的-n次方,再求和
0.10101000对应
2^0 2^(-1) 2^(-2) 2^(-3) 2^(-4) 2^(-5) 2^(-6) 2^(-7) 2^(-8)
0×2^0=0
1×2^(-1)=0.5
1×2^(-3)=0.125
1×2^(-5)=0.03125
求和得:二进制对应十进制为0.65625
因为精度问题,无法返回到0.66
~
⑤二进制转八进制
三合一,依次乘2的n次方求和
01000010分为
001、000、010
0×2^2 0×2^1 1×2^0=1
0×2^2 0×2^1 0×2^0=0
0×2^2 1×2^1 0×2^0=2
二进制对应八进制为102
~
⑥八进制转二进制
除2取余,倒序排列,高位补0
102
1÷2=0余1
高位补0得001
0÷2=0余0
高位补0得000
2÷2=1余0,1÷2=0余1
高位补0得010
八进制对应二进制为001000010
~
⑦二进制转十六进制
四合一,依次乘2的n次方求和
01000010分为
0100、0010
0×2^3 1×2^2 0×2^1 0×2^0=4
0×2^3 0×2^2 1×2^1 0×2^0=2
二进制对应十六进制为42
注意10 11 12 13 14 15
要转换为字母ABCDEF
~
⑧十六进制转二进制
除2取余,倒序排列,高位补0
42
4÷2=2余0,2÷2=1余0,1÷2=0余1
高位补0得0100
2÷2=1余0,1÷2=0余1
高位补0得0010
十六进制对应二进制为001000010
~
⑨十进制转八进制
除8取余,倒序排列,高位补0
(或通过二进制中转)
66
66÷8=8余2,
8÷8=1余0,
1÷8=0余1,
十进制对应八进制为102
~
⑩十进制转十六进制
除16取余,倒序排列,高位补0
(或通过二进制中转)
66
66÷16=4余2,
4÷16=0余4,
十进制对应十六进制为42
~
⑪八进制转十进制
依次乘8的n次方,再求和
102
1×8^2 0×8^1 2×8^0=66
八进制对应十进制为66
~
⑫十六进制转十进制
依次乘16的n次方,再求和
42
4×16^1 2×16^0=66
十六进制对应十进制为66
~
⑬八进制转十六进制
用二进制和十进制中转
~
⑭十六进制转八进制
用二进制和十进制中转