zoukankan      html  css  js  c++  java
  • 数据结构:进制转换

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

    >>以十进制为参考点:

    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

     ​​​​​​​

  • 相关阅读:
    《道德经》全文
    mysql 服务启动后停止
    安装docker-compose
    金刚般若波罗蜜经
    elasticsearch reIndex
    【基础篇】1.vim复制黏贴跳转
    新事物如何持续性发展
    舒服的状态
    教父
    关于拖延
  • 原文地址:https://www.cnblogs.com/monion/p/7049554.html
Copyright © 2011-2022 走看看