数学的n进制加法是怎么推理的
大学计算机课中十进制二进制等其他进制之间的相互转化有详细的算法,但却没有这些算法的推导过程只有结果。大一的时候很纠结地在网上找了很久就是找不到,结果成了心头一道坎老卡着过不去。不料今夜神清气爽如沐春风躺床上没事做满脑子瞎想竟想明白了。 我是学语言的,让学工科的兄弟看了不免笑话。但鉴于目前网上没这东西,本着一位四化好青年天生的自觉感和厚脸皮感特贴到空间上聊作纪念。 。 书上的转化法主要有按权展开相加求和法,除基数取余法,乘基数取整法。 我想通了前两个,第一个巨简单,第二个绕一点,并据它们的推导方式摸索出了另一种算法(原理一样)。最后一个乘基数法还没捋顺。 。 一.按权展...全部
大学计算机课中十进制二进制等其他进制之间的相互转化有详细的算法,但却没有这些算法的推导过程只有结果。大一的时候很纠结地在网上找了很久就是找不到,结果成了心头一道坎老卡着过不去。不料今夜神清气爽如沐春风躺床上没事做满脑子瞎想竟想明白了。
我是学语言的,让学工科的兄弟看了不免笑话。但鉴于目前网上没这东西,本着一位四化好青年天生的自觉感和厚脸皮感特贴到空间上聊作纪念。 。 书上的转化法主要有按权展开相加求和法,除基数取余法,乘基数取整法。
我想通了前两个,第一个巨简单,第二个绕一点,并据它们的推导方式摸索出了另一种算法(原理一样)。最后一个乘基数法还没捋顺。 。 一.按权展开相加求和法 如二进制110001转换为10进制 110001B=100000B 10000B 1 因为2进制数有1,0两个符号,每一位有两种变化,10000之前一个数是1111,此四位数根据排列组合原理有2^4个变化,也就是2^4个数抛开0000有(2^4) -1个数,再进一位到10000则有(2^4)-1 1。
所以10000=(2^4) 同理可知 1=2^0 10=2^1 100=2^2…100000=2^5…… (也就是说,2进制数逢2进一,每移动n位则变化2^n倍,其他进制也是这样,16进制逢16进1,每n位变化16^n倍) 所以110001B=100000B 10000B 1= 1*2^5 1*2^4 1=32 16 1=49 (如果有小数部分,按照排列组合的思路同样可以得到0。
1B=2^-1=0。5D…等等,我就不写了) 。 以上过程同样适用于八进制十六进制等任何进制 。 二.除基数取余法 如19转2进制 根据此法, 19/2=9余1 9/2=4 余1 4/2=2 余0 2/2=1 余0 1/2=0 余1 由下往上取余数 10011,也就是第一个余数1在第一位,第二个余数1在第二位…最后一个余数放到最高位 如果将此过程表达为一般式子,其原理立刻一目了然: 19=2*9 1=2*(2*4 1) 1…。
。(继续往下分解我就不写了) 可以看到,括号右边的1即是第一个余数,因数为2的零次方,根据由第一个算法推导所得出的结论,应该处于第一位。括号里的第二个余数1,因数为2的一次方,处于第二位。这个式子写全了即可等效于上面的商余式。
这就是为什么商余法最后得出的余数要从下往上排列来写成新的数。(而其商余过程中除下来N个2就用2的N-1次方加上相应余数即可得到原来的数。) 。 其他各进制也可以用这个方法来推 。
三。新的算法 如69转化为8进制,背书的话要用商余法一步一步算,但既然弄清了商余法背后不过是因式分解的简单思路,大可不必麻烦: 69=8^2 5=100 5=105 可以试一下,换别的进制随便哪个数,算完了用商余法验证不会有任何问题。
而这种算法比商余法更快,更简单,也更容易理解 。 。 最新更新,十进制小数转换为二进制小数(乘基数取整法)的原理。 一、首先介绍乘基数取整法的步骤。 如十进制数0。375转化为二进制数, 原数乘以二进制基数2=0。
75,整数部分为0,记0。0 小数部分0。75乘以2=1。5,整数部分为1,记0。01 小数部分0。5乘以2=1。0,整数部分为1,记0。011 小数部分为0,计算结束,结果为0。011 。
0。375D=0。011B 。 二、上述方法的原理。 。 0。375=375/1000=3/8=(2^1 2^0)/2^3 由本文最顶部推导出的结论可知2^1=10,2^3=1000 所以0。
375=3/8=(2^1 2^0)/2^3=11/1000=0。011 可以看到,这是比乘基数取整法更为直观易懂的算法,因为它就是乘基数取整法的内在原理。 。 现在是关键了,为什么乘基数取整法要像那样算: 。
0。375B乘以基数2,即0。011D乘以2^1,也就是将0。011D向左移动一位(同样见顶部结论)变成0。11D,这样一来就把原数0。011D十分位上的数移动到整数部分来了。由于0。375B乘以2=0。
75B,整数部分为0,可知0。375B的二进制小数十分位为0。,所以记上0。0D 0。75乘以基数2,即0。11乘以2^1=1。1,这样就把原数0。011的百分位移动到了整数位。而0。75乘以基数2得到1。
5,整数部分为1,于是可知0。 375的二进制小数百分位为1,所以记上0。01 现在只剩下最后一位了,将1。5(1。1)整数部分舍去,整数部分变成0,乘以2即可把原数的千分位移动到整数位上来,0。
5*2=1,千分位为1,所以结果为0。011。 。 任意一个二进制小数都可以表示成0。******,乘基数取整法的思路就是每次乘以基数把离小数点最近的那一位小数转移到整数位上来,记录后再将整数位归0,重复上一步操作,一直乘到取尽为止。
收起