数据结构:进制转换

计算机的内存都是以二进制的形式进行数据存储:

>>以十进制为参考点:

1.十进制转二进制:39(10)=100111(2)

 例:39/2 = 19 1

    19/2 = 9  1

    9/2  = 4  1

    4/2  = 2  0

    2/2  = 1  0

    1/2   = 1  1

 

从下往上数100111

 

 

???数转换的特征

10→2: (57.75)10 = (111001.110)2

整数部分     57/2   1                        小数部分         

                                                      0.75*2  1    

28/2   0                                 (1.5-1)*2  取 1

14/2   0                                 (1.0-1)*2  取0

            7/2    1     

            3/2    1     

            1/2    1  

于小数部分的一定要正取,整数部分的要逆取。 

 

 

 

2. 十进制转八进制:358(10)=546(8)

 

例:358/8 = 44 6

    44/8  = 5 4

5/8   = 0 5

 

3. 十进制转16进制:120(10)=78(16)

例:120/16 = 7 8

7/16   = 0 7

 

特征:

 

 

 

 

>>其他进制转十进制:

1. 二进制转十进制:

111101(2)= 1*2的0次方+ 0*2的1次方 + 1*2的2次方 + 1*2的3次方 + 1*2的4次方 + 1*2的5次方

          = 1*1+ 0*2+ 1*4+1*8+ 1*16 +1*32

          = 1+ 0 + 4+ 8+ 16+ 32

          = 61(10)

 

例:01.101(2)=?(10)

开始把0.101转换成10进制的。

    小数点后面的“1”,处于负一位,后面的“0”处于负二位,在后面的“3”处于负三位,

   因为是2进制的转换成10进制的,那么0.101=1*2的-1次方+0*2的-2次方+1*2的-3次方=0.5+0+0.125=0.625

将整数部分的和小数部分的相加,5+0.625=5.625   即101.101(2)=5.625(10)

 

8进制,16进制转换10进制,将“1*2的-1次方+0*2的-2次方+1*2的-3次方”里面的乘号后面的“2”分别换成“8”和“16”就好了。其余的都雷同上述。

 

2. 八进制转十进制:

224(8)=148(10)

224:

第0位  4*8的0次方     = 4

第1位  2*8的1次方     =16

第2为  2*8的2次方     =128

 

 

 

3. 16进制数转换成10进制数

2AF5(16)=10997(10)

16进制数2AF5的第0位为“5”,第1位为“F”, 第2位为“A” 第3位为“2”

第0位    5*16的0次方  =5

第1位    F*16的1次方  =240

第2位    A*16的2次方  =2560

第3位    2*16的3次方  =8192

 

@7

在2进制中只有2个数字,既1,0

在8进制中只有8个数字,既0,1,2,3,4,5,6,7

在10进制中有10个数字,既0,1,2,3,4,5,6,7,8,9

在16进制中有10个数字和6个字母,既0,1,2,3,4,5,6,7,8,9和A,B,C,D,E,F,

   字母A代表数字10,字母B代表数字11,字母C代表数字12,字母D代表数字13,字母E代表数字14,字母F代表数字15,

 

 

 

 

>>二进制转换16进制:

1.制转换为十六进制,因为2的4次方等于16,所以4个二进制就等于一个十六进制。

 

1001=1*2的0次方+1*2的3次方=9

 

 

1111=1*2的0次方+1*2的1次方+1*2的2次方+1*2的3次方=15=F

1110=1*2的1次方+1*2的2次方+1*2的3次方=14=E

0001=1*2的0次方=1

1111011111001=1EF9

 

原理: 四位二进制数写成:   b3   b2   b1   b0

                                                                       1 --- 有一个 1 (2^0 =1)

                                                                 1 --- 有一个 2  (2^1=2)

                                                          1 --- 有一个 4   (2^2=4)

                             1 --- 有一个 8 (2^3=8)

这叫作权 (8,4,2,1)

就如同十进制数的个十百千一样。

二进制 十进制 16进制

0000=0=0

0001=1=1

0010=2=2

0011=3=3

0100=4=4

0101=5=5

0110=6=6

0111=7=7

1000=8=8

1001=9=9

1010=10=A (10)

1011=11=B (11)

1100=12=C (12)

1101=13=D (13)

1110=14=E (14)

1111=15=F (15)

 

 

 

 

 

2.制转换八进制:

二进制 数可以用1位 八进制 数表示

列表如下

二进制   八进制

000           0

001           1

010           2

……

111          7

 

如果是多位,就从低向高数,每3位二进制数分在一组,表示一个八进制数,比如二进制1011表示为八进制为13,二进制011001111表示为八进制为317

 

 

 

 

>>负数的二进制表示方法

假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:

00000000 00000000 00000000 00000101

5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。

现在想知道,-5在计算机中如何表示?

在计算机中,负数以其正值的补码形式表达

什么叫补码呢?这得从原码,反码说起。

 

原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。

比如 00000000 00000000 00000000 00000101 是 5的 原码。

 

反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)

比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。

称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。

反码是相互的,所以也可称:

11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。

 

补码:反码加1称为补码。

也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。

那么,补码为:

11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。

再举一例,我们来看整数-1在计算机中如何表示。

假设这也是一个int类型,那么:

1、先取1的原码:00000000 00000000 00000000 00000001

2、得反码:     11111111 11111111 11111111 11111110

3、得补码:     11111111 11111111 11111111 11111111

可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF

 

 

 

 

 

>>二进制的运算方法:

二进制数的运算方法 同十进制都属于 进位 运算方法,它们有类似的地方,当然也有不同的地方,二进制下只有加法。乘法和减法是变相的加法,除法只是简单地移位。

首先,简单的说明一下,什么是进位 运算方法?    十进制含有的数是 0 1 2 3 4 5  6 7 8 9  十个数, 而二级制只有两个数 0 1 

比方说十进制数1234=1x10^3 + 1x10^2 + 3x10^1 + 4x10^0

其中1 2 3 4 分别居在 千位 十位 百位 个位 。

同样的二进制数 里也存在一样的位制 

二进制化十进制

二进制的1010  =1 x 2^3+ 0 x 2^2 + 1 x 2^1+ 0 x 2^0 =  10 (十进制)

同 理十进制化为二进制 :10(10)=1 x 2^3+ 0 x 2^2 + 1 x 2^1+ 0 x 2^0 =1010(2)因为我们不能较快的获 得有多少个 2^0 2^1  2^2   2^3  2^4  2^5  2^6 ........2^n 所以才有短除法这一形式来辅助运算 除2取 余法

  10/2=5.......0 

   5/2=2........1  

   2/2=1........0   

   1/2=0........1      把结果倒过来写就是1010了 

以上是进制的转换。

加法:

下面就是加法的运算   

  十进制下有                                                   二进制下就有

     1234                                                                     1011                                                                    

+   2846                                                            +       1111                    

—--.--.—---                                                         ------.-.-.------                                                   

     4080                                                                   11010   

总的来说 二进制下和是十进制的运算时一样的,

十进制下满十进一,二进制下满二进一。

减法 有两种方式    以下是特殊情况  注意第一位是符号位。  0代表正数, 1 代表负数

           。。                                             另一种方式是吧减法当成加上一个负数

  0    1 0 0 1                                                             0     1001

- 0    1 1 1 1             《===》                        +         1     0001             

----------------                                                 ------------------。------

  1    1 0 1 0           算的结果是负数                           1    1010

负数与成正数互化就是取反加一

取反 0 1 0 1

+               1

---------------  

 负的 0 1 1 0 =负的 0x2^3+1x^2+1x2^1+0x2^0=  负6              

表示方法是取反加一 前面的第一位是符号位 1 代表负数  1  1110

乘法111x111=    1   1   1

             x            1   1   1

    --------------------------------

                          1    1   1

                     1   1    1

+               1  1   1     

-----------------------------------

            1   1   0   0   0    1

除法:

           1 1 1 1 / 1 0= 111  

   1111 / 11 = 101

除法和十进制的出发类似 不同的是这里是不会出现小数的 就像例子中的1 1 1 1 / 1 0= 111   化成十进制是 15除以2 但是结果却是111=7 因为那个余数1 已经被挤出去了,这里涉及到了计算机的内存问题 这就不深究 知道怎么算就好了 

以0x开始的数据表示16进制,计算机中每位的权为16,即(16进制)10 = (10进制)1×16

 

 ​​​​​​​

posted @ 2017-06-19 17:04  会说话的帆船  阅读(3283)  评论(0编辑  收藏  举报