目录
学习内容:
十进制转二进制
方法一:
整数部分:除2取余倒排法
例如59:
1.59除以2,商29,余数1
2.29除以2,商14,余数1
3.14除以2,商7,余数0
4.7除以2,商3,余数1
5.3除以2,商1,余数1
6.1除以2,商0,余数1
7. 倒排上面六步的余数即 6->5->4->3->2->1,111011 即 0011 1011
方法二:
这个方法就是记住2的n次幂。
2的n次幂 128 64 32 16 8 4 2 1
例如:59
从上表中从左到右,找到比59小的第一个数32,然后从32->1开始算,将他们相加,超过59的不加。
可以找到32 16 8 2 1四个数,然后在我们有相加到的数上面写1,没有的0,如下图
这样就算出来了结果是:0011 1011
方法三:
差额法
比如2022,要除的话比较久,不妨看一下规律:
2^11=2048,超过2022,取前一个数也就是2^10=1024。
根据等比数列求和(高中知识不懂的可以复习下):2^10+2^9+2^8+......+2^1+2^0=2^11-1=2047。(一共11位)
看得出来2022比较接近2047,作差:
2047-2022=25=16(2^4)+8(2^3)+1(2^0)【用方法二】即 000 0001 1001。
也就是说只要这3项(1)变为0,其余8项(均为1)加起来就会等于2022.
所以转换后就变为:111 1110 0110。注意看哦,即上面的16,8,1的位置为0,其余为1就行。
备注:25(也就是作差的数)可以用方法一来求。即11001(5位)。2022前面取1(111111(11-5=6位)),后几位取反(即00110)就可以。
2022转化后就是:111111(6位)拼接00110(取反的5位)=11111100110.。
这个方法的目的就是把目标数(如2022)转化为值小的数(25),减小计算量,然后取反就行。
还可以这样理解:
其实就是取反。假设你有10000块1块的零钱,要你数9858块出来,你直接数9858肯定要很久,所以你可以数10000-9958=42,这样你数42拿出来,剩下的不就时9958吗。
这个差额法就是同理,你先看下你的数离谁比较近。比如2022(相当于9958)离我们常见的2047(相当于10000),这个我们很容易知道二进制是0111 1111 1111(11个1的二进制)所以你可以把2047-2022=25(二进制好求,除数法11001),这样剩下的2022不就是2047(二进制11111111111)-25(二进制11001)吗,按位相减就行。
方法三取自优快云博主「恭德」原文链接:https://blog.youkuaiyun.com/luo_bin2010/article/details/122714718
大家有好的方法也可以提出来,欢迎交流!