• 巧学二进制


    巧学二进制

    一 什么是进制

    进制也就是进位制,是人们规定的一种进位方法。对于任何一种进制-----X进制,就表示某一位置上的数运算时是逢X进一位。十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,X进制就是逢X进位。

    二 常见二进制

    十进制

    0、1、2、3、4、5、6、7、8、9、10、11、12------

    二进制

    0、1、10、11、100、101、110、111、1000、1001、1011、1111、10000、10001、10011、10111、11111------

    八进制

    0、1、2、3、4、5、6、7、10、11、12、13、14、15、16、17、20、21------

    十六进制

    0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、10、11、12、13、14、15、16、17、18、19、1A、1B、1C、1D、1E、1F------

    三 进制转换(正整数)

    其他进制转十进制

    • 二进制 10001011 转换位 十进制(看第一位后面有N个数 1*n^n)

      10001011 = 1 * 2^7 + 1 * 2^3 + 1 * 2^2 + 1 * 2^0= 139

    • 十进制 102 转换为 十进制

      102 = 1 * 10^2 + 0 * 10^1 + 2 *10^0 = 102

    • 二进制 1011001 转换为 十进制

      64 + 16 + 8 + 1 = 89

    • 八进制 76 转换为 十进制

      7 * 8^1 + 6 * 8^0= 62

    • 十六进制 12b 转换为 十进制

      1 * 16^2 + 2 * 16^1 + b = 299

    十进制转换为其他进制

    • 十进制 26 转换为 二进制

        26 / 2 = 13  余  0
        13 / 2 = 6   余  1
        6  / 2 = 3   余  0
        3  / 2 = 1   余  1
        结果是  11010
      
    • 十进制 37 转换为 二进制

        37 / 2 = 18 余 1
        18 / 2 = 9  余 0 
        9  / 2 = 4  余 1
       	4  / 2 = 2  余 0
        2  / 2 = 1  余 0
        结果 为 100101
      
    • 十进制 489 转换为八进制

        489 / 8 = 61 余 1
        61 / 8 = 7  余 5
        结果 751
      
    • 总结:十进制转为N进制。将十进制数除以N,得到的商再除以N,依次类推,直到得到的商小于N,然后在旁边标出各步的余数,最后从最后一次商开始倒着拼上余数写出来。高位补零。

    2 的次方数

    	2^0 = 1
    	2^1 = 2
    	2^2 = 4
    	2^3 = 8
    	2^4 = 16
    	2^5 = 32
    	2^6 = 64
    	2^7 = 128
    	2^8 = 256
    	2^9 = 512
    	2^10 = 1024
    

    八四二一法 快速转换

    • 二进制 10011011 转换为 十进制

        128 + 16 + 8 + 2 + 1 = 155
      
        128 64 32 16 8 4 2 1 (个人方法)
         1  0   0  1 1 0 1 1
      
    • 二进制 1100101001 转换为 八进制

        1  100  101  001  对应  1  4  5  1
        结果为 1451
      
    • 十进制 59 转换为 二进制

        32+16+8+2+1=111011
      
    • 八进制 176 转换为 二进制

        1		7		2
        001	   111	   010
        
        1111010
      
    • 二进制 1000111011011 转换为 十六进制

        0001	0001	1101	1011
          1		  1       D       B
        11DB
      
    • 十六进制 AD1 转换为 二进制

        1010 1101 0001
      
    • 十进制 89 转换为 八进制(先转换为二进制)

        89 = 64 + 16 + 8 + 1
        001 011 001
        131
      
    • 八进制 47 转换为 十六进制

        10 0111
        27
      

    四、进制转换(小数)

    十进制转为二进制

    • 十进制数 10.25 转换为 二进制

        整数部分 10 转换二进制 为 1010
        小数部分 0.25
        0.25 * 2 = 0.5 取 0  小数部分 0.5
        0.5  * 2 = 1   取 1  小数部分 0.0  结束
        最后结果  1010.01
      
    • 十进制数 12.58 转换为 二进制

        整数部分 12 转换为 二进制  1100
        小数部分 0.58
        0.58 * 2 = 1.16	取  1  小数部分 0.16 
        0.16 * 2 = 0.32	取  0  小数部分 0.32
        0.32 * 2 = 0.64 取  0  小数部分 0.64
        0.64 * 2 = 1.28 取  1  小数部分 0.28
        0.28 * 2 = 0.56 取  0  小数部分 0.56
        0.56 * 2 = 1.12 取  1  小数部分 0.12
        继续 永远也玩不了 ....
        结果 1100.100101....
      
    • 总结:

        小数部分只有是 0.5  0.25  0 .75  0.125  0.0625 等 可以是 有限小数
        转换为分数后,分母是 2的次方数 才可以转为有限小数
      
    • 同样适用于 十进制 转 其他进制

    二进制转十进制

    • 二进制 1101.1101 转为 十进制

        整数部分 1101 转为 十进制 为 13
        小数部分0.1101= 1 * 2^-1 + 1 * 2^-2 + 0 * 2^-3 + 1 * 2^-4= 0.5 + 0.25 + 0 + 0.0625 = 0.8125
        13.8125
      
    • 同样适用 其他进制 转换为 十进制

    熟记 2 的 负数次方

    	2^-1=0.5
    	2^-2=0.25
    	2^-3=0.125
    	2^-4=0.0625
    	2^-5=0.03125
    	2^-6=0.015625
    	2^-7=0.0078125
    	2^-8=0.00390625
    	2^-9=0.00195312
    	2^-10=0.00097656
    

    二进制和八进制或十六禁止的小数转换

    • 二进制 10.10010101 转换为 八进制

        整数部分 10 转 八进制 为 2
        小数部分 进行 拆分 3个一组,不足右补零
        100——>4
        101——>5
        010——>2
        最后结果 2.452
      
    • 二进制数 10.10010101 转换为 十六进制

        整数部分 10 转 十六进制 为 2
        小数部分进行拆分4个一组,
        1001->9
        0101->5
        最后结果 2.95
      
    • 八进制 17.236 转换为 二进制

        整数部分17转二进制为1111
        小数部分进行拆分 一个拆分成3个数字为一组
        2->010
        3->011
        6->110
        最后结果 1111.010011110
      
    • 十六进制 a.3ef 转换为 二进制

        整数部分 a 转 二进制 为 1010
        小数部分进行拆分 一个拆分成4个数字为一组
        3->0011
        e->1110
        f->1111
        最后结果 1010.001111101111
      

    五、二进制运算

    二进制加法

    • 1101 + 100101

           1101
        +100101
        ---------
         110010
      
    • 直接转化为十进制算好之后转为二进制

        1101=13
        100101=37
        13+37=50
        110101
      

    二进制减法

    • 1001001 - 10011

        1001001
        - 10011
        ---------------
      	 110110  
      

    二进制乘法

    • 1001 * 110

          1001
        x  110
        -------------
          0000
         1001
        1001
        ---------------
        110110
      

    二进制除法

    • 100110 / 110

        	        110	
        	-----------------
        110)100110
        	    110
        	--------------------------
        		111
        		110
        	--------------------------
        		    10
      
        结果 110 余 10
  • 相关阅读:
    CPP--关于long的争议和思考
    CPP--借助神器VS理解内存存储(含大小端对齐)
    1.QT开发第一个程序
    POJ-1456 Supermarket 贪心问题 有时间限制的最小化惩罚问题
    HDU-4310 Hero 贪心问题
    HDU-1789 Doing Homework again 贪心问题 有时间限制的最小化惩罚问题
    HDU-2303 The Embarrassed Cryptographer 高精度算法(大数取模)
    【错题本】刷算法题中出现的一些错误和小技巧
    HDU-2050 折线分割平面 找规律&递推
    记intel杯比赛中各种bug与debug【其五】:朴素贝叶斯分类器的实现和针对性的优化
  • 原文地址:https://www.cnblogs.com/DCL1314/p/7197491.html
Copyright © 2020-2023  润新知