除二倒序取余的数学原理

除二倒序取余的数学原理

在本科低年级,除二倒序取余数是我们学习过的一种十进制数字向二进制数字转换的方法。但是当时不求甚解,没有从数学原理的角度去分析这个问题,因此一直觉得对这个方法的理解不足。之前在知乎看到一个帖子,深受启发,在此转述一下原理的叙述。

对于一个十进制数,我们的表示为

a n 1 0 n + a n − 1 1 0 n − 1 + . . . + a 1 1 0 1 + a 0 1 0 0 a_{n}10^n + a_{n-1}10^{n-1} + ... + a_{1}10^{1} + a_{0}10^0 an10n+an110n1+...+a1101+a0100

比如数字567可以写为

5 ∗ 1 0 2 + 6 ∗ 1 0 1 + 7 ∗ 1 0 0 5 * 10^2 + 6 * 10^1 + 7 * 10^0 5102+6101+7100

同样,二进制表示中,一个二进制数有类似的表达方式。

a n ∗ 2 n + a n − 1 ∗ 2 n − 1 + . . . + a 0 ∗ 2 0 a_{n} * 2^n + a_{n-1} * 2 ^ {n-1} + ... + a_{0} * 2^{0} an2n+an12n1+...+a020

例如567可以写成

( 1000110111 ) 2 (1000110111)_{2} (1000110111)2

1 ∗ 2 9 + 1 ∗ 2 5 + 1 ∗ 2 4 + 1 ∗ 2 2 + 1 ∗ 2 1 + 1 ∗ 2 0 1*2^9 + 1 * 2^5 + 1 * 2^4 + 1 * 2^2 + 1 * 2^1 + 1*2^0 129+125+124+122+121+120

对于10进制数,除10以后,余数是10位表示中,个位的数字。表示如下

a n 1 0 n + a n − 1 1 0 n − 1 + . . . + a 0 1 0 0 = 10 ∗ ( a n 1 0 n − 1 + a n − 1 1 0 n − 2 + . . . + a 1 ) + a 0 a_{n}10^{n} + a_{n-1}10^{n-1} + ... + a_{0}10^0 = 10 * (a_{n}10^n-1 + a_{n-1}10^{n-2} + ... + a_{1}) + a_{0} an10n+an110n1+...+a0100=10(an10n1+an110n2+...+a1)+a0

这个被孤零零留下的余数 a 0 a_{0} a0即位10进制的最低位。

以此类推,

Z = a n 1 0 n + a n − 1 1 0 n − 1 + . . . + a 0 1 0 0 = 10 ∗ ( a n 1 0 n − 1 + a n − 1 1 0 n − 2 + . . . + a 1 ) + a 0 = 10 ∗ [ 10 ∗ ( a n 1 0 n − 2 + a n − 1 1 0 n − 3 + . . . + a 2 ) + a 1 ] + a 0 Z = a_{n}10^{n} + a_{n-1}10^{n-1} + ... + a_{0}10^0 = 10 * (a_{n}10^n-1 + a_{n-1}10^{n-2} + ... + a_{1}) + a_{0} = 10 * [10 * (a_{n}10^{n-2} + a_{n-1}10^{n-3} + ... + a_2) + a_{1}] + a_0 Z=an10n+an110n1+...+a0100=10(an10n1+an110n2+...+a1)+a0=10[10(an10n2+an110n3+...+a2)+a1]+a0

对于一个二进制数也相同。

将一个二进制数不断除以2取余数,依次得到整数在二进制下的个位,十位…

Z = a n 2 n + a n − 1 2 n − 1 + . . . + a 0 2 0 = 2 ∗ ( a n 2 n − 1 + a n − 1 2 n − 2 + . . . + a 1 ) + a 0 = 2 ∗ [ 2 ∗ ( a n 2 n − 2 + a n − 1 2 n − 3 + . . . + a 2 ) + a 1 ] + a 0 a_{n}2^n + a_{n-1}2^{n-1} + ... + a_{0}2^0 = 2 * (a_{n}2^{n-1} +a_{n-1}2^{n-2} + ... + a_1) + a_{0} = 2 * [2 * (a_n2^{n-2} +a_{n-1}2^{n-3} + ... + a_{2}) + a_{1}] + a_{0} an2n+an12n1+...+a020=2(an2n1+an12n2+...+a1)+a0=2[2(an2n2+an12n3+...+a2)+a1]+a0

567这个数,无论是 ( 567 ) 10 (567)_{10} (567)10还是 ( 1000110111 ) 2 (1000110111)_{2} (1000110111)2本质都是同一个数的不同表示。

reference: https://www.zhihu.com/question/343550977

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值