黑马程序员 java基础——进制转换

时间:2021-02-07 00:38:00

---------------------- android培训java培训、期待与您交流! ----------------------  

 

十进制转二进制:

  用2辗转相除至结果为1

  将余数和最后的1从下向上倒序写 就是结果

  例如302

  302/2 = 151 余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/2 = 0 余1

  故二进制为100101110

 

二进制转十进制

  从最后一位开始算,依次列为第0、1、2...位

  第n位的数(0或1)乘以2的n次方

  得到的结果相加就是答案

  例如:01101011.转十进制:

  第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

  0乘2的7次方=0

  然后:1+2+0

  +8+0+32+64+0=107.

  二进制01101011=十进制107.

 

负数二进制变成十进制要取反加1.

也就是说要求负数,就是 用对应正数,取反+1 

4     0000 0100     取反    1111 1011       +1后    1111  1100  

3     0000 0011      取反    1111 1100      +1后     1111  1101

这种方法叫求补运算。负数转正数,也是进行取反+1 的求补运算

负数二进制转十进制,  是对这个负数二进制进行求补运算,得到对应的正数,前面加个负号就得到对应的十进制了

 
 
二进制换算八进制
  例:二进制的“10110111011”   换八进制时,从右到左,三位一组,不够补0,即成了:   010 110 111 011   然后每组中的3个数分别对应4、2、1的状态,然后将为状态为1的相加,如:   010 = 2   110 = 4+2 = 6   111 = 4+2+1 = 7   011 = 2+1 = 3   结果为:2673
 
二进制转换十六进制也类似,只要每组4位,分别对应8、4、2、1就行了,如分解为:   0101 1011 1011   运算为:   0101 = 4+1 = 5   1011 = 8+2+1 = 11(由于10为A,所以11即B)   1011 = 8+2+1 = 11(由于10为A,所以11即B)   结果为:5BB

 

假设十进制数为1000,则八进制数位1750,过程如下:
1000/8=125,余数为0;
125/8=15,余数为5;
15/8=1,余数为7;
1/8=0,余数为1;
你从下往上看这些余数,顺序写出,就是答案1750,要注意的是最后一定要除到0为止,也就是最后一步1/8=0,一定要除到0.
 
再示范一个数,比如十进制的534,八进制为1026,过程为:
534/8=66,余数为6;
66/8=8,余数为2;
8/8=1,余数为0;
1/8=0,余数为1;
仍然是从下往上看这些余数,顺序写出,答案为1026
 
归纳一下,大进制数转小进制数都可以用这个方法,比如十六进制转10进制,如果你不知道答案,可以用windows自带的计算器来验证,要用科学型的(在计算器——查看——科学型)
 
如果是八进制转十进制的,可以用下述方法:
还是上面的例子1026八进制转十进制
1*8^3+0*8^2+2*8^1+6*8^0=534 (8^3指的是8的立方)
上式各项的意义:1*8^3中的1是1026的千位;八进制时,第二个数为8;3是指4-1,这个4是指1026是4位数。
0*8^2意义同上。0是1026的百位;八进制时,第二个数为8;2是指4-2(8后面的指数是递减的形式)。
一直写到8^0一项即可。
所以求AnAn-1……A1八进制的n位数转十进制时(比如八进制的1026,对应的A4=1,A3=0,A2=2,A1=6),总结出公式为:
An*8^n+An-1*8^(n-1)+An-2*8^(n-2)+……+A1*8^0=对应的十进制数
 
所以小进制数转大进制数都可以用这个方法。
 
 

---------------------- android培训java培训、期待与您交流! ----------------------