PC_十进制转二进制速算+常用的2进制和10进制数/转换关系

常用的2进制和10进制数/转换关系

🎈密集0/1串

  • 以下内容应当十分熟悉,而且能够逆用自如
  • 包括n位最大小数/整数
  • n位最小小数/整数

1 = 2 0 10 = 2 1 100 = 4 = 2 2 1000 = 8 = 2 3 1=2^0 \\ 10=2^1 \\ 100=4=2^2 \\ 1000=8=2^3 1=2010=21100=4=221000=8=23

  • 熟悉16进制十分有必要,对于提高计算效率和速度大有好处
    • 口诀0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
    • 为了强调9后面是A,而不是10(是但不完全是)
      • 9ABCDEF
      • 9 , 10 , A , B \boxed{\xcancel{9,10,A,B}} 9,10,A,B

1001 = 2 3 + 2 0 = 9 = 9 H 1010 = 2 3 + 2 1 = 10 = A H 1011 = 2 3 + 2 1 + 2 0 = 11 = B H 1100 = 2 3 + 2 2 = 12 = C H 1101 = 2 3 + 2 2 + 2 0 = 13 = D H 1110 = 2 3 + 2 2 + 2 1 = 14 = E H 1111 = 2 3 + 2 2 + 2 2 + 2 1 + 2 0 = 15 = F H H 后 缀 表 示 十 六 进 制 数 \\ \begin{aligned} 1001&=2^3+2^0=9&=9H \\ 1010&=2^3+2^1=10&=AH \\ 1011&=2^3+2^1+2^0=11&=BH \\ 1100&=2^3+2^2=12&=CH \\ 1101&=2^3+2^2+2^0=13&=DH \\ 1110&=2^3+2^2+2^1=14&=EH \\ 1111&=2^3+2^2+2^2+2^1+2^0=15&=FH \end{aligned} \\H后缀表示十六进制数 1001101010111100110111101111=23+20=9=23+21=10=23+21+20=11=23+22=12=23+22+20=13=23+22+21=14=23+22+22+21+20=15=9H=AH=BH=CH=DH=EH=FHH

🎈其他常用二进制数!

  • 它们通常用来展开大数为十六进制(二进制)

    • 配合减权定位法
  • 2 10 = 1024 ≈ 1 0 3 2 11 = 2 ⋅ 2 10 = 2048 2 12 = 2 2 ⋅ 2 10 = 4 ⋅ 2 10 = 4096 2 15 = 2 5 ⋅ 2 10 = 32768 ≈ 32 ⋅ 2 10 2 16 = 2 6 ⋅ 2 10 = 64 ⋅ 2 10 = 65536 ≈ 65 ⋅ 1 0 3 ≈ 64 ⋅ 1 0 3 2 20 = 2 10 ⋅ 2 10 = 1048576 ≈ 1 0 6 百 万 级 别 2^{10}=1024\approx10^3 \\ 2^{11}=2\cdot{2^{10}}=2048 \\ 2^{12}=2^2\cdot2^{10}=4\cdot2^{10}=4096 \\ 2^{15}=2^{5}\cdot{2^{10}}=32768\approx{32\cdot{2^{10}}} \\ 2^{16}=2^6\cdot{2^{10}}=64\cdot2^{10} =65536\approx{65\cdot{10^3}}\approx{64\cdot10^3} \\ 2^{20}={2^{10}}\cdot{2^{10}}=1048576\approx10^6百万级别 210=1024103211=2210=2048212=22210=4210=4096215=25210=3276832210216=26210=64210=655366510364103220=210210=1048576106

n位二进制真值最大最小值

整数

正整数

2 n = 1 0 ⋯ 0 ⏟ n 个 0 ; ( 最 小 的 ( n + 1 ) 位 整 数 ) 2 n − 1 = 1 ⋯ 1 ⏟ n 个 1 ; ( n 位 最 大 整 数 , n 位 1 整 数 2^{n}=1\underbrace{0\cdots0}_{n个0};(最小的(n+1)位整数) \\ 2^{n}-1=\underbrace{1\cdots1}_{n个1};(n位最大整数,n位1整数 2n=1n0 00;((n+1))2n1=n1 11;(n,n1

负整数
  • − 2 n − 1 = − 1 ⋯ 1 ⏟ n 个 1 ; ( n 位 最 小 负 整 数 , n 位 1 整 数 ) − 2 0 = − 1 ; 最 大 负 数 ( 根 据 需 要 补 0 ) -2^{n}-1=-\underbrace{1\cdots1}_{n个1};(n位最小负整数,n位1整数) \\ -2^0=-1;最大负数(根据需要补0) 2n1=n1 11;(n,n1)20=1;(0)

小数

  • 纯 小 数 ( x ∈ ( − 1 , 1 ) ) 纯小数(x\in(-1,1)) (x(1,1))
    • 正 小 数 x ∈ ( 0 , 1 ) 正小数x\in(0,1) x(0,1)
    • 负 小 数 x ∈ ( − 1 , 0 ) 负小数x\in(-1,0) x(1,0)
正数小数
  • 2 − n = + 0. 0 ⋯ 1 ⏟ n 位 小 数 ; ( 最 小 的 n 位 小 数 ) 1 − 2 − n = + 0. 1 ⋯ 1 ⏟ n 位 小 数 ( n 个 1 ) ; ( 最 大 小 数 , n 位 1 小 数 ) \begin{aligned} 2^{-n}&=+0.\underbrace{0\cdots1}_{n位小数};(最小的n位小数) \\ 1-2^{-n}&=+0.\underbrace{1\cdots1}_{n位小数(n个1)};(最大小数,n位1小数) \end{aligned} 2n12n=+0.n 01;(n)=+0.n(n1) 11;(,n1)

  • 2 − n − 1 = − 0. 1 ⋯ 1 ⏟ n 位 小 数 ; ( 最 小 的 n 位 小 数 ) − 2 − n = − 0. 0 ⋯ 1 ⏟ n 位 小 数 ; ( 最 大 的 负 n 位 小 数 ) \begin{aligned} 2^{-n}-1&=-0.\underbrace{1\cdots1}_{n位小数} ;(最小的n位小数) \\ -2^{-n}&=-0.\underbrace{0\cdots1}_{n位小数};(最大的负n位小数) \end{aligned} 2n12n=0.n 11;(n)=0.n 01;(n)

二进制绝对值加减法

  • 利用下面公式(原理)将被减数拆分称

  • 因子分解(指数)

    • 2 m ⋅ 2 n = 2 m + n 2^m\cdot2^n=2^{m+n} 2m2n=2m+n

      • 这是一个很有用的二进制公式

      • 上 面 公 式 对 应 的 二 进 制 形 式 为 : ( 1 0 ⋯ 0 ⏟ m 个 0 ) 2 ⋅ ( 1 0 ⋯ 0 ⏟ n 个 0 ) 2 = ( 1 0 ⋯ 0 ⏟ m + n 个 0 ) 2 上面公式对应的二进制形式为: \\ (1\underset{m个0}{\underbrace{0\cdots0}})_2\cdot{(1\underset{n个0}{\underbrace{0\cdots0}})_2} =(1\underset{m+n个0}{\underbrace{0\cdots0}})_2 :(1m0 00)2(1n0 00)2=(1m+n0 00)2

    • 2 n = 2 ⋅ 2 n − 1 = 2 n − 1 + 2 n − 1 2^n=2\cdot{2^{n-1}}=2^{n-1}+2^{n-1} 2n=22n1=2n1+2n1

      • 2 0 = 1 2^0=1 20=1
      • 2 1 = 2 0 + 1 2^1=2^0+1 21=20+1
  • ∑ i = 0 n 2 i = 2 0 ( 1 − 2 n + 1 ) 1 − 2 = 2 n + 1 − 1 而 : ∑ i = 0 n 2 i = 1 ⋯ 1 ⏟ n 个 1 2 n + 1 − 1 = 1 ⋯ 1 ⏟ n 个 1 2 n − 1 = 1 ⋯ 1 ⏟ n − 1 个 1 \sum\limits_{i=0}^{n}2^i=\frac{2^0(1-2^{n+1})}{1-2}=2^{n+1}-1 \\而: \\\sum\limits_{i=0}^{n}2^i=\underset{n个1}{\underbrace{1\cdots{1}}} \\ 2^{n+1}-1=\underset{n个1}{\underbrace{1\cdots{1}}} \\2^{n}-1=\underset{n-1个1}{\underbrace{1\cdots{1}}} i=0n2i=1220(12n+1)=2n+11:i=0n2i=n1 112n+11=n1 112n1=n11 11

    • 2 n − 1 = ∑ i = 0 n − 1 2 i = 2 n − 1 + 2 n − 2 ⋯ + 2 1 + 2 0 = ( 1 ⋯ 1 ⏟ n 个 1 ) 2 n = ( 2 n − 1 ) + 1 = ( ∑ i = 0 n − 1 2 i ) + 1 = 2 n − 1 + 2 n − 2 ⋯ + 2 1 + 2 0 + 1 = ( 1 ⋯ 1 ⏟ n 个 1 ) + 1 = ( 1 0 ⋯ 0 ⏟ n 个 0 ) 2^{n}-1 =\sum\limits_{i=0}^{n-1}2^i=2^{n-1}+2^{n-2}\cdots+2^1+2^0 \\ =\left(\underset{n个1}{\underbrace{1\cdots{1}}}\right) \\\\ 2^{n}=(2^n-1)+1 =(\sum\limits_{i=0}^{n-1}2^i)+1 \\=2^{n-1}+2^{n-2}\cdots+2^1+2^0+1 \\ =\left(\underset{n个1}{\underbrace{1\cdots{1}}}\right)+1 \\ =\left(1\underset{n个0}{\underbrace{0\cdots{0}}}\right) 2n1=i=0n12i=2n1+2n2+21+20=(n1 11)2n=(2n1)+1=(i=0n12i)+1=2n1+2n2+21+20+1=(n1 11)+1=(1n0 00)

    • ( 1 0 ⋯ 0 ⏟ n 个 0 ) = ( 1 ⋯ 1 ⏟ n 个 1 ) + 1 \left(1\underset{n个0}{\underbrace{0\cdots{0}}}\right) =\left(\underset{n个1}{\underbrace{1\cdots{1}}}\right)+1 (1n0 00)=(n1 11)+1

🎈二进制数幂展开(幂和)形式相互转换

  • 例 如 : 10100 1 2 = 1 ⋅ 2 4 + 1 ⋅ 2 3 + 1 ⋅ 2 0 1 ⋅ 2 4 + 1 ⋅ 2 3 + 1 ⋅ 2 0 = 10100 1 2 例如: 101001_2=1\cdot2^4+1\cdot2^3+1\cdot2^0 \\ 1\cdot2^4+1\cdot2^3+1\cdot2^0=101001_2 :1010012=124+123+120124+123+120=1010012

    • 该方法也称为减权定位法交好用的方法,对于大数比较高效
      • 对于小数(16以内的(4位二进制数)),直接记忆对应关系会更快速
      • 对于大数,使用十六进制来代替二进制是个比较好的选择,可以提高书写效率,降低写错机率
  • 幂和形式相比于二进制0/1串形式的好处在于,符号更加简洁,(省略了0的书写)

    • 特别是被计算的数比较大时( 128 = 2 7 128=2^7 128=27,已经占用了8bit的长度)
    • 系数非0的幂对应于二进制结果中的一个1
  • 从幂的形式转化为0/1串

    • 推荐的做法是,根据被转换的幂和式的最高位权M,列出0~M位权列

      • 将系数为1的列先填充

      • 其余的全填充0即可

  • 例如: y = 2 7 + 2 5 + 2 4 + 2 1 y=2^7+2^5+2^4+2^1 y=27+25+24+21

    • 7位权6543210
      1系数0110010
      • 因 此 y = 2 7 + 2 5 + 2 4 + 2 1 = 1011001 0 2 因此y=2^7+2^5+2^4+2^1=10110010_2 y=27+25+24+21=101100102
  • x=65530的二进制(十六进制)展开;

    • 2 16 = 65536 x = 65530 = 2 16 − 6 = ( 2 16 − 1 ) − ( 6 − 1 ) 这 可 以 将 被 减 数 化 为 全 1 , 方 便 减 法 = O x F F F F − O x 5 = F F F 0 H + ( 111 1 2 − 10 1 2 ) = F F F 0 H + 101 0 2 = F F F A H 2^{16}=65536 \\x=65530=2^{16}-6 \\=(2^{16}-1)-(6-1) \\这可以将被减数化为全1,方便减法 \\=\mathrm{Ox}FFFF-\mathrm{Ox}5 \\=FFF0H+(1111_2-101_2) \\=FFF0H+1010_2 =FFFA\mathrm{H} 216=65536x=65530=2166=(2161)(61)1,便=OxFFFFOx5=FFF0H+(111121012)=FFF0H+10102=FFFAH

🎈例(幂化运算处理二进制减法)

  • 1100 0 2 − 10 1 2 = ( 2 1 + 2 0 ) ⋅ 2 3 − ( 2 2 + 2 0 ) = 2 4 + 2 3 − 2 2 − 1 = 2 4 + ( 2 3 − 1 ) − 2 2 = 2 4 + ( 2 2 + 2 1 + 2 0 ) − 2 2 = 2 4 + 2 1 + 2 0 = 1001 1 2 11000_2-101_2 =(2^1+2^0)\cdot 2^3-(2^2+2^0) \\ =2^4+2^3-2^2-1 \\ =2^4+(2^3-1)-2^2 \\=2^4+(2^2+2^1+2^0)-2^2 \\=2^4+2^1+2^0 \\=10011_2 1100021012=(21+20)23(22+20)=24+23221=24+(231)22=24+(22+21+20)22=24+21+20=100112

  • 1001000 0 2 − 10110 1 2 = 2 7 + 2 4 − ( 2 5 + 2 3 + 2 2 + 2 0 ) = 2 2 ⋅ 2 5 + ( 2 3 + 2 2 + 2 1 + 2 0 + 1 ) − ( 2 5 + 2 3 + 2 2 + 2 0 ) = ( 2 1 + 2 0 ) 2 5 + 2 1 + 1 = 2 6 + 2 5 + 2 1 + 2 0 = 110001 1 2 10010000_2-101101_2=2^7+2^4-(2^5+2^3+2^2+2^0) \\ =2^2\cdot2^5+(2^3+2^2+2^1+2^0+1)-(2^5+2^3+2^2+2^0) \\={(2^1+2^0)}2^5+2^1+1 \\=2^6+2^5+2^1+2^0 =1100011_2 1001000021011012=27+24(25+23+22+20)=2225+(23+22+21+20+1)(25+23+22+20)=(21+20)25+21+1=26+25+21+20=11000112

手工计算(十进制转二进制数)

通用方法
  • 除基取余法处理整数部分
  • 乘积取整法处理小数部分
  • 将 123.687 5 10 转 换 为 二 进 制 数 将123.6875_{10}转换为二进制数 123.687510

在这里插入图片描述

🎈🎈减权定位法
  • 减权定位法对于手工计算是较为高效的方法
    • 基本原理也是按权展开,对于二进制,十进制,十六进制内的对应关系熟练的话,可以算的很快
      • 包括十进制转二进制,二进制转十进制
      • 比如x=123
        • 分析其数量级为 1 0 3 以 内 或 者 说 1 0 2 量 级 , 对 应 二 进 制 为 2 6 以 及 2 7 左 右 10^3以内或者说10^2量级,对应二进制为2^6以及2^7左右 103102,2627
        • 2 7 = 128 , 2 6 = 64 2^7=128,2^6=64 27=128,26=64
        • x 1 = x − 2 6 = 123 − 64 = 59 x_1=x-2^6=123-64=59 x1=x26=12364=59
        • x 2 = 59 − 2 5 = 59 − 32 = 27 x_2=59-2^5=59-32=27 x2=5925=5932=27
        • x 3 = 27 − 2 4 = 11 x_3=27-2^4=11 x3=2724=11
        • x 4 = 11 − 2 3 − 2 1 − 2 0 = 0 x_4=11-2^3-2^1-2^0=0 x4=11232120=0
        • 因 此 x = 2 6 + 2 5 + 2 4 + 2 3 + 2 1 + 2 0 = 111101 1 2 因此x=2^6+2^5+2^4+2^3+2^1+2^0=1111011_2 x=26+25+24+23+21+20=11110112
减权定位法的其他形式
  • 如果您熟练十六进制和二进制的转换,那么改进的减权定位法可以进一步加快
例如:K=27;
  • 4 ⋅ 6 = 24 = 2 2 ⋅ ( 2 2 + 2 1 ) 4\cdot{6}=24=2^2\cdot(2^2+2^1) 46=24=22(22+21)
  • 24 + 3 = 10 0 2 ⋅ 11 0 2 + 1 1 2 = 1100 0 2 + 1 1 2 = 1101 1 2 24+3=100_2\cdot110_2+11_2=11000_2+11_2=11011_2 24+3=10021102+112=110002+112=110112
例如:K=123
  • 2 7 = 2 2 + 5 = 2 2 ⋅ 2 5 = 4 × 32 = 128 2^7=2^{2+5}=2^2\cdot{2^5}=4\times{32}=128 27=22+5=2225=4×32=128

  • 方法1:

    • 123 − 3 ⋅ 2 5 = 123 − 3 ⋅ 32 = 123 − 96 = 27 123-3\cdot{2^5}=123-3\cdot{32}=123-96=27 123325=123332=12396=27

    • 3 ⋅ 2 5 = 1 1 2 ⋅ 10000 0 2 = 110000 0 2 3\cdot{2^5}=11_2\cdot100000_2=1100000_2 325=1121000002=11000002

    • 27 = 11011 27=11011 27=11011

    • 123 = 1111011 123=1111011 123=1111011

  • 方法2:

    • 123 = 128 − 5 = 2 7 − ( 2 2 + 2 0 ) 123=128-5=2^7-(2^2+2^0) 123=1285=27(22+20)
十进制转二进制小结
  • 如果大权定位可以很好的接近被转换的数,那么优先使用大权

    • 否则使用小一点的权在试一次(通常权越小,逼近效果越好,但是操作次数可能会增加)
  • 补偿法(划分)

    • 153=128+2+23=1000 0000+10+(16+7)=1000 0010+10000+111=1001 1001
  • 削减法

    • 153=160-7=1010 000-111=1001 1111-110
  • 经验表法

    • 最快的方法:经验表法(相当于乘法口诀那样的效果)

    • 次快的方法:

      • 前两类方法比较适合跟2的幂比较接近的情况下,和容易计算
      • 经验法比较适合和相邻近2的幂比较大
      • 如果能够将常用2的幂的整数倍(十进制形式)比较熟练,那么三种方法结合,也可以达到很高的计算效率
    • 记住一些常用的2的幂的倍数:

      • 比如8的倍数系列

      • 倍数结果转换二进制结果
        10801010*1000=101000
        11881011*1000=101100
        12961100*1000
        131041101*1000
        141121110*1000
        151201111*1000
      • 16的被数系列

      • 101601010*10000
        111761011*10000
        121921100*10000
        132081101*10000
        142241110*10000
        152401111*10000
100
  • 100 = 3 × 32 + 4 = 1 1 2 × 2 5 + 2 2 = 1100000 + 100 = 110010 0 2 100=3\times32+4=11_2\times{2^5}+2^2=1100000+100=1100100_2 100=3×32+4=112×25+22=1100000+100=11001002
  • 100 = 12 × 8 + 4 = 110 0 2 × 2 3 + 2 2 100 =12\times8+4=1100_2\times{2^3}+2^2 100=12×8+4=11002×23+22
    • = 110000 0 2 + 10 0 2 = 1100100 + 2 =1100000_2+100_2=1100100+2 =11000002+1002=1100100+2
153
  • 153=128+2+23=1000 0000+10+(16+7)=1000 0010+10000+111=1001 1001
  • 153=160-7=16*10-7=1010 000-111=1001 111+1 -111=1001 111 - 111+1=1001 000+1=1001 001
  • 153=160-7=16*10-7=1010 000-111=1001 1111-110= 1001 1001
178
  • 178 = 16 × 10 + 18 178=16\times10+18 178=16×10+18
    • = 10000 × 1010 + 2 4 + 2 1 =10000\times{1010}+2^4+2^1 =10000×1010+24+21
    • = 10100000 + 10000 + 10 =1010 0000+10000+10 =10100000+10000+10
    • 10110010 10110010 10110010
215
  • 215=255-40=1111 1111-10 1000=1101 0111
    • 40=32+8=10 0000+1000=10 1000
252
  • 2 8 = 256 2^8=256 28=256
  • 252=256-1-3=1111 1111-11=1111 1100
12345
  • K = 12 × 1 0 3 + 345 K=12\times{10^3}+345 K=12×103+345

    • = 12 × 2 10 + 57 =12\times{2^{10}}+57 =12×210+57
    • = 12 × 2 10 + 3 × 2 4 + 9 =12\times{2^{10}}+3\times{2^4}+9 =12×210+3×24+9
      • 对于16以内的数转换为2进制很简单,到了上面这一部分基本可以结束了
    • = 110 0 2 × 2 10 + 1 1 2 × 2 4 + 2 3 + 2 0 =1100_2\times{2^{10}}+11_2\times{2^4}+2^3+2^0 =11002×210+112×24+23+20
    • = 11000000000000 + 110000 + 1000 + 1 =1100 0000000000+110000+1000+1 =11000000000000+110000+1000+1
    • = 11000000111001 =11000000111001 =11000000111001
  • 从二进制到十进制可以很快速:

    • 相比于原始按权展开要快不少
    • 1010100 1 2 = A 9 H = 16 ⋅ 10 + 9 = 169 10101001_2=A9H=16\cdot10+9=169 101010012=A9H=1610+9=169
常用的减法情况
  • 在实际手算题目中,几乎都是:A>B>0求A-B
  • 利用补码法可以将二进制数的减法用取反和加法的方式求解
K=145
  • 145=128+2+15=1000 0000+(10+1111)=1001 0001
K=230
  • 230=255-25=1111 1111 - 11001=1110 0110
    • 25=16+9=10000+1001=11001
A-B
  • 补码法

    • 改写
    • 对齐
    • 还原
  • A-B=(123-45)-(4*11+1)=(0111 1111 -100)-(101100+1)=0111 1011-10 1101

    • =0111 1011-0010 1101
  • y=A-B=123-45=C(C(123)+C(-45))=C(0111 1011+1101 0011)=C(1 0100 1110)=C(100 1110)=78

变形
  • A>B>0
    • 这种情况下,不需要计算符号位
  • A=0111 1011
  • B=0010 1101
  • 求y=A-B
  • y=C(C(A)+C(-B))=C(0111 1011+1101 0011)=C(1 0100 1110)=C(100 1110)=78
posted @   xuchaoxin1375  阅读(30)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示