怎样快速把十进制转换为二进制?

2023-07-11 19:11:50

 

一般的十进制数=十进制整数+十进制小数。

以下讲十进制整数。

将十进制整数n转为m(m<n)进制,有简便方法。以下以二进制为例。口诀:累除取整到最小,求余串连新进制。

步骤一、累除取整到最小。

f(0)=n

f(1)=n//2

(注释一:python语言的取整除法,即求n/2的整数部分,又称向下取整(floor),或阶梯取整函数,常记为int(n/2),或[n/2],或floor(n/2)或floor(n/2,1);下面用到一个性质:n//(ab)=(n//a)//b,即[n/(ab)]=[[n/a]/b] )

f(2)=n//4=f(1)//2

......

f(k)=n//2^k=f(k-1)//2

.......

直到某个f(M)=n//2^M=f(M-1)//2的值为1,达到最小值,于是可以停止计算(参考注释二)。

步骤二、求余串连新进制。

考察f(M),...,f(1),f(0)除以2的余数(相当于逢奇数写1,逢偶数写0),从高位到低位依序写出,即是将n转化为二进制数的从高位到低位的数字串(参考注释二)。或者说,将f(0),f(1),...,f(M)除以2的余数从低位到高位依序写出。

注释二:在理论研究时,可以继续计算,任意持续或再次停止,然后所得到的结果一直为0,对应于在最高位1之前添任意个0,而转换为二进制数字串仍然正确。

注释三:转其他进制,均可类似上面的方法进行。

示例:将十进制数11111转为二进制数。

解:

步骤一、累除取整到最小。

11111, 5555, 2777, 1388, 694, 347, 173, 86, 43, 21, 10, 5, 2, 1

步骤二、求余串连新进制。

10101101100111(二进制)

{助记:

二进制数字串太长,可转为8进制表示来助记。

助记法一:从左而右三位一断,依次转8进制得5331,最后只有11,补0成为110,记为6/2,以8进制记忆为53316/2

助记法二:直接得到此数的标准的8进制表示的方法:

由助记法一可知,若从右而左三位一断,则最左侧只有二位,于是先取出左侧的两位,后面的再三位一断。这样能直接得到此数的标准的8进制表示,为25547。

或者直接从右而左三位一断,从右向左写出此数的标准的8进制表示,为25547。

验算:手机计算器,电脑计算器如windows计算器calc.exe,数学软件,编程软件,网页在线计算器,网页在线数制转换

以手机计算器为例(我这时正在用小米max3手机打字),如下图一,向左滑屏为图二出现进制转换,在图三开始计算。

以上为图一,向左滑屏得下图。

点击进制转换,得下图

不妨试一试:将十进制数11111转为3,4,5,8,9,12,16进制。(注意,转4、8、16进制时,也可先转为2进制,再转为4、8、16进制。)

例,11111转为8进制。

方法一:先转二进制,得10101101100111

自右而左三位一分节得10,...,将每个小节的2进制转为8进制即得8进制数25547

方法二:口诀:累除取整到最小,求余串连新进制。

11111, 1388, 173, 21, 2;然后从最后一项开始依次写出除以8的余数,即得所求:25547

补注:

用这种方法做二进制,在记忆力足够的情况下,我可以靠心算而直接快速地写出结果,易操作,难出错,这种方法我认为已经是够快了(其实我恰好认为这种方法是最快的)。

还有,也可以先转四进制再转二进制,与这种方法不相上下的快,各有所长。

其他方法(例如减去最大的2的方幂的方法)及方法的改进,还可以研究。但是在速度上要超过这里提到的这种方法,我看是很难的了。


以上就是关于《怎样快速把十进制转换为二进制?》的全部内容,本文网址:https://www.7ca.cn/baike/51607.shtml,如对您有帮助可以分享给好友,谢谢。
标签:
声明

排行榜