c++十进制转二进制_如何心算二进制转十进制

从这篇文章你将了解到什么?
二进制转十进制的心算
二进制 十进制 之间的转换
本系列文章的文末都会放上一个“速记卡”,这是为了方便以后回来快速查找并预览相关知识。

1 二进制转十进制有什么用

如果你是网管或者网络工程师,那么你就会接触到IP地址的运算。比如下面这种场景,就要用到二进制相关知识:

5908fd454230ae84e9bae6071438d26e.png

如果你是程序员, 掌握了二进制,就可以优化自己写的代码,还可以理解别人的源码。

写算法的时候如果可以很快口算出一串由很多1和0组成的二进制串代表的含义, 那么将有助于我们找到很多问题的规律。

这就像印度数学天才拉马努金,他看一些复杂的算术符号就像我们看简单的加减法一样,平常人要计算很多步才能得到解的数学题,他看一眼就可以得出答案。 所以他一生留下了3900多个公式,却大部分懒得写公式证明,让后世数学家绞尽脑汁。

68097894c5da1ebf5c6da91f7a56fce4.png
数学天才拉马努金

2 二进制转十进制

先来看看二进制和十进制的对照表

十进制54321二进制10110011101

那么在平常的时候怎么快速地心算,把简单的二进制转成十进制呢?

二进制101的十进制是多少呢?

每到这种时候,我们就可以先拿十进制出来做类比。十进制的101可以拆解成下面这样:

29b994cc5937e465c9e6bf36e1c85dab.png

二进制的101也可以用同样的方式拆解:

a019ef8553ba549fb8f19262b2705e18.png

把上面的公式做成下面的表格:

cdc34a6ee70bd4bd392c281e59176d1d.png

从表格上发现,其实我们只要把表格最后一行【按位计算的结果】做加法运算,就可以求出二进制101的十进制。

0575200cfafa4ecef2f8ac76d771800a.png

也就是说,我们只要把2的0次方一直到2次2方计算出来,记录在表格上,就可以用加法快速计算出二进制转十进制的结果。

我们姑且把上面的方法称为二进制转十进制的表格算法。

2.1 二进制转十进制-表格算法

下面来实验下我们推导出的表格算法。

11001的十进制是多少呢?

第一步,首先画一个表格, 填上上面的二进制数字

132e7f79fbd68d9cd5cb0739ddb43298.png

第二步, 对着2的n次方参照表,填上从右边开始依次填上2的0次方到2的4次方, 也即是1,2,4,8

0b08107ba1e2c288c50a5be01f63c0ab.png

2的n次方参照表:

c3712c3acde3b1982dbdca989a5d208f.png

第三步,算出结果 16 + 8 + 1 = 25

7463a4fd3a5e555dbd987d8523f56e61.png

也就是二进制11001的十进制就是25,是不是很神奇呢?

我们熟悉了这个过程之后,把2的n次方记在心里,就可以快速心算了。比如二进制11101 就是 16+8+4+0+1, 即十进制的29。

c94cdb998fd1b2aadf894a61485b113d.png

比如二进制10000 就是 16+0+0+0+0 , 即十进制的16。

31cf3fc12ee49af490de847a7046cd0e.png

3 十进制转二进制

那么10进制又是怎么转二进制呢?

十进制13的二进制是多少?

3.1 十进制转二进制除二法

如图,我们从下到上读取余数得到1101,所以十进制13的二进制就是1101。

这种方法不利于心算,只有遇到非常大的数字时可以使用。

fde141ffdf0eeaa81266406d61dafed6.png

3.2 十进制转二进制表格法

首先还是画一个表格,写上1,2,4,8

2f813226dcb3e3fcfeeb07fbb007a9cc.png

从右往左开始比较,找出第一个比13小的最大数字,也就是8,标记为1

4f9be4f80c184ea2e894e8df39f35e45.png

13-8=5, 接下来找出比5小的最大数字,也就是4,也标记为1。

25cf58a514a5f7824f7831c163a89963.png

5-4=1, 最后把数字1也标记为1,其余数字全部标记为0

733db7b98f5f4c9992be66e011974176.png

于是得到十进制13的二进制就是1101。

3.3 十进制转二进制的计算技巧

有时候十进制转二进制还是有些技巧的,比如下面这道题:

十进制15的二进制是?

我们很容易就记起来,十进制16的二进制就是10000,那么十进制16-1=15,二进制10000-1 = 01111。很快就可以得到十进制15的二进制就是1111。

741257501376ea8166e1a4cc77e138d9.png

5f87bb65b10a06c4a14c49151a15e23e.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值