谁知道负数十进制怎么转换八进制和十六进制
比如 int=-10 printf("%x,%o",x,x)
是怎么计算的 要详细点的
谁知道负数十进制怎么转换八进制和十六进制
比如 int=-10 printf("%x,%o",x,x)
是怎么计算的 要详细点的
十进制转二进制和二进制转十进制的算法是很多初学者头疼的问题,觉得很难掌握。这里,我通过举例说明这两种进制的转换方法。
(一)十进制(整数)转二进制:
用2辗转相除至结果为1
将余数和最后的1从下向上倒序写 就是结果。
例1:将405转换成二进制的数。
解:405/2=202余1(注意这个1将写在二进制数的最后面)
202/2=101余0
101/2=50余1
50/2=25余0
25/2=12余1
12/2=6余0
6/2=3余0
3/2=1余1(注意这个1将写在二进制数的最前面)
故405转换成二进制的数为110010101
例2:将302转换成二进制的数。
302/2 = 151 余0 (注意这个0将写在二进制数的最后面)
151/2 = 75 余1
75/2 = 37 余1
37/2 = 18 余1
18/2 = 9 余0
9/2 = 4 余1
4/2 = 2 余0
2/2 = 1 余0 (注意这个1将写在二进制数的最前面)
故302转换成二进制的数为100101110
(二)二进制转十进制
从最后一位开始算,依次列为第0、1、2...位
第n位的数(0或1)乘以2的n次方
得到的结果相加就是答案
例如:1101011.转十进制:
第0位:1乘2的0次方=1
1乘2的1次方=2
0乘2的2次方=0
1乘2的3次方=8
0乘2的4次方=0
1乘2的5次方=32
1乘2的6次方=64
然后:1+2+0
+8+0+32+64=107.
二进制1101011=十进制107.
对十进制小数乘2得到的整数部分和小数部分,整数部分既是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分.
如此不断重复,直到小数部分为0或达到精度要求为止.第一次所得到为最高位,最后一次得到为最低位
如:0.25的二进制
0.25*2=0.5 取整是0
0.5*2=1.0 取整是1
即0.25的二进制为 0.01 ( 第一次所得到为最高位,最后一次得到为最低位)
0.8125的二进制
0.8125*2=1.625 取整是1
0.625*2=1.25 取整是1
0.25*2=0.5 取整是0
0.5*2=1.0 取整是1
即0.8125的二进制是0.1101(第一次所得到为最高位,最后一次得到为最低位)
十进制小数→→→→→八进制小数 方法:“乘8取整”
0.71875)10 =(0.56)8
0.71875*8=5.75 取整5
0.75*8=6.0 取整6
即0.56
十进制小数→→→→→十六进制小数方法:“乘16取整”例如:
(0.142578125)10=(0.248)16
0.142578125*16=2.28125 取整2
0.28125*16=4.5 取整4
0.5*16=8.0 取整8
即0.248