世界上有10种人:一种是懂得二进制的,另一种是不懂二进制的

上面这是流传在程序员之间很久的一个冷笑话。

是不是get不到梗的笑点?

没有关系,看完本文,你再来看这句话就会会心一笑。

回到过去

让我们假设你回到了初中,这时候你情窦初开。喜欢上了临街的小哥哥(小姐姐),你们俩家的窗户面对面。放寒假的时候,你们约好了某天晚上八点偷偷溜出来约会。但是不能让父母知道,所以你们不能通过打电话方式来通知对方,今晚自己是否能顺利溜出来。为了不让对方白等,你们不得不约定一种新的通信方式。

这种新的通信方式要满足:

  • 安静--不能让父母听到,能悄无声息自然是最好了
  • 易懂--对方看到后能立马知道你要表达的信息

因为住的很近,可以从窗户相互看到对方家里,聪明的你立马想到可以用屋子里吊灯的灯光来进行通信。

你们约定到了八点钟

如果我屋子里的灯亮着,代表我可以顺利溜出去

如果我屋子里的灯不亮,代表我无法顺利溜出去

现在你们就可以用屋子里的灯开关,来表达两种状态
开:能出来
关:不能出来

你们可以悄无声息给对方传达信息,这太完美了!

新的问题

不过过了一段时间你们发现了新问题,有时候,8点钟恰好有事情,可能要推迟半小时才能溜出来。有时候,8点钟事情比较多,可能要推迟1小时才能出来。

现在你们有四种信息要传递

  • 今晚8点钟准时出来
  • 今晚不能出来
  • 今晚8点30能出来
  • 今晚9点能出来

但是一盏灯的开关只能表示两种状态,怎么办才好呢?

聪明的你立马想到,可以再加一盏灯啊!你把书桌上的台灯放到窗前
并且更新了之前的通信方式

  • 台灯关着,吊灯关着--今晚没戏,出不来了

台灯关着,吊灯开着--今晚8点,不见不散

台灯开着,吊灯关着--推迟半小时,今晚八点半才能溜出来

台灯开着,吊灯开着--推迟1小时,今晚9点才能溜出来

哇哦,再一次用自己的聪明才智解决了这个问题。
现在你用两盏灯,来表达四种状态

一些思考

让我们用符号来重新表述下
我们用数字0表示灯灭
数字1表示灯亮

一盏灯的情况

  • 0 ==> 今晚八点准时出来
  • 1 ==> 今晚八点不能出来

两盏灯的情况

  • 0 0 ==> 今晚没戏,出不来了
  • 0 1 ==> 今晚8点,不见不散
  • 1 0 ==> 推迟半小时,今晚八点半才能溜出来
  • 1 1 ==> 推迟1小时,今晚9点才能溜出来

让我们再来简化一下箭头右边,我们用数字0,1,2,3 分别来代表今晚约会的4种状态

  • 0: 今晚没戏,出不来了
  • 1: 今晚8点,不见不散
  • 2: 推迟半小时,今晚八点半才能溜出来
  • 3: 推迟1小时,今晚9点才能溜出来

现在我们可以把两边都用数字来简化了

  • 00 ==> 0
  • 01 ==> 1
  • 10 ==> 2
  • 11 ==> 3

如果我们再加一盏灯,能表示多少种状态呢?

  • 000 ==> 0
  • 001 ==> 1
  • 010 ==> 2
  • 011 ==> 3
  • 100 ==> 4
  • 101 ==> 5
  • 110 ==> 6
  • 111 ==> 7

一共是8种

好了,现在我告诉你,已经开始使用二进制了!

没错!

左边的是二进制,右边就是相对应的十进制

比如说二进制的 111 代表的就是我们常用十进制的 7

为什么呢?

虽然你可能不太相信,但是确实你已经开始使用二进制了。

那么二进制到底是怎么回事呢?

我们日常生活中所用的都是十进制,也就是满10进1
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
当要数10时,就要进1位,也就是十位数写1个位数写0
就是10啦

二进制就是满2进1,
0
1
10
11
10
100
当要数2的时候,就要进1位了,下一位写1,当前位变成0
也就是10

二进制转十进制

那么我们看到一个二进制的数,如何知道它表示的10进制的数是几呢?
我们还是想一下十进制的101,我们可以很轻松的读出来这是 一百零一
但是我们怎么知道 一零一 就是 一百一十一呢?
因为我们知道
从右边向左数
第一位是个位,这个位的数字是几就是几
第二位是十位,这个位的数字是几就表示几十
第二位是百位,这个位的数字是几就表示几百

所以101 = 1x100 + 0x10 + 1x1
一个一百 + 零个10 + 一个一

我们这里引入一个新名词权重(Weight) 来表示每一位的实际意义
个位--权重 1 = 10^0 十的零次方
十位--权重 10 = 10^1 十的一次方
百位--权重 100 = 10x10 = 10^2 十的二次方
千位--权重 1000= 10x10x10 = 10^3 十的三次方
可以看到从右边向左 权重依次扩大10倍

所以我们其实可以到这样的结论

其实就是每一位的数字乘以此位的权重,然后相加101 = 1x10x10 + 0*10 + 1x1

用次方表示101 = 1x(10^2) + 0x(10^1) + 1x(10^0) = 1x100 + 0x10 + 1 =101

OK我们如何表示知道二进制具体的大小,只需要套用这个公式即可
那么首先我们要知道二进制每一位的权重是多少
既然十进制每一位权重都是10的次方数
那么二进制的每一位权重自然是2的次方数了

从右向左数
第一位 1 = 2^0 二的零次方
第二位 2 = 2^1 二的一次方
第三位 4 = 2x2= 2^2 二的二次方
那么回到我们之前的问题,
二进制的101,我们从上文的状态表可以知道

  • 000 ==> 0
  • 001 ==> 1
  • 010 ==> 2
  • 011 ==> 3
  • 100 ==> 4
  • 101 ==> 5
  • 110 ==> 6
  • 111 ==> 7

代表的是5
转换过程101 = 1x(2^2)+0x2^1 + 1x(2^0) = 1x4+0x2+1=5
怎么样,很简单吧!

get 这个梗

再回到我们最初那个冷笑话

世界上有10种人:一种是懂得二进制的,另一种是不懂二进制的

这里的10其实是二进制的,转换成十进制就是 10=1x(2^1)+0x(2^0)=1x2+0x1=2
其实就是十进制的2

会心一笑了吗?

是几进制_10分钟带你了解什么是二进制相关推荐

  1. 用程序员计算机算进制,一文带你读懂计算机进制

    hi,大家好,我是开发者FTD.在我们的学习和工作中少不了与进制打交道,从出生开始上学,最早接触的就是十进制,当大家学习和使用计算机时候,我们又接触到了二进制.八进制以及十六进制.那么大家对进制的认识 ...

  2. 【verilog_8】: 设计60进制计数器,带异步复位、同步使能、同步装载、同步清零、同步置位

    1.设计60进制计数器,带异步复位.同步使能.同步装载.同步清零.同步置位 法一 author : Mr.Mao e-mail : 2458682080@qq.commodule cnt60x (in ...

  3. 设计60进制计数器,带异步复位、同步使能、同步装载、同步清零、同步置位

    设计60进制计数器,带异步复位.同步使能.同步装载.同步清零.同步置位 Design a modulus 60 counter, with asynchronous reset, synchronou ...

  4. a*算法matlab代码_10分钟带你入门MATLAB

    ​ 10分钟带你快速入门MATLABhttps://www.zhihu.com/video/1234089282815188992 前一段时间我发现有些小伙伴MATLAB基础比较薄弱,今天我来让各位小 ...

  5. c语言十进制小数转其他进制,只写出了十进制小数转换成二进制的,求二进制小数转十进制的...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #define NUM 2 #define ZERO 0.000001 int PrnMainMen ...

  6. jk触发器改为四进制_异步计数器 || 计数器的分类 ||异步二进制十进制|| 74290 8421 5421 || 数电...

    异步计数器 || 计数器的分类 || 异步 二进制 十进制 || 74290 || 数电 这一节介绍异步二进制计数器. 计数器功能: 计数器是对输入脉冲个数进行计数的时序电路. 计数器除了直接用于计数 ...

  7. pandas 索引_10分钟带你学会Pandas多层级索引

    ​Pandas库的名字来源于其中3种主要数据结构开头字母的缩写: Panel,Dataframe,Series. 其中Series表示一维数据,Dataframe表示二维数据,Panel表示三维数据. ...

  8. 多维列表索引_10分钟带你学会Pandas多层级索引

    ​Pandas库的名字来源于其中3种主要数据结构开头字母的缩写: Panel,Dataframe,Series. 其中Series表示一维数据,Dataframe表示二维数据,Panel表示三维数据. ...

  9. 反向算法_10分钟带你了解神经网络基础:反向传播算法详解

    作者:Great Learning Team deephub.ai 翻译组 1.神经网络 2.什么是反向传播? 3.反向传播是如何工作的? 4.损失函数 5.为什么我们需要反向传播? 6.前馈网络 7 ...

最新文章

  1. ansible调用callbacks插件 保存执行结果
  2. 下载anaconda前需要卸载python吗_anaconda安装与卸载
  3. 压缩文件目录 linux,linux_压缩文件及目录
  4. 屏蔽机房设计时需要注意什么 ?如何更好维护使用屏蔽机房?
  5. C# Aes CryptoStream Specified padding mode is not valid for this algorithm的解決方法
  6. html5编辑文档,HTML5带各种趣味动画的文本编辑器
  7. 使用SQL存储过程有什么好处 用视图有什么好处
  8. macOS big Sur 无限进入恢复模式,如何修复
  9. Matlab中滤波操作的相关函数
  10. 高等数学张宇18讲 第十七讲 三重积分、第一型曲线曲面积分
  11. 下载并安装 J2SDK以及运行第一个java程序
  12. 8K HDR!|为 Chromium 实现 HEVC 硬解 - 原理/实测指南
  13. 【华为面试手撕代码】
  14. 对本人所发资源“金山词霸2010牛津旗舰版安装及故障终极解决方案”的说明
  15. JavaScript---网络编程(9-2)--DHTML技术演示(2-2)-表格加强
  16. integer conversion resulted in a change of sign
  17. 我不喜欢代码,却为何坚持做程序员(二)
  18. docker(5、网络2) 1、容器间通信的三种方式 2、 容器如何访问外部 3、 外部如何访问容器
  19. 打入客户内部做销售1
  20. 0-1整数规划的求解思路整理

热门文章

  1. FFmpeg之wav转mp3(二十四)
  2. Android 音频焦点(Audio Focus)
  3. android 恢复出厂设置代码流程(Good!)
  4. UE4之批量删除actor
  5. mysql之desc 与asc
  6. Python numpy 多维数组切片
  7. mpacc和计算机硕士,考MPAcc还是工作?读研三年VS工作三年对比!
  8. 新冠疫情数据可视化python_【一点资讯】新冠疫情数据分析 | Python可视化工具看全国各地的新增趋势 www.yidianzixun.com...
  9. mysql服务器架构_Mysql的主从服务器架构配置
  10. as安装过程中gradle_电磁阀在安装过程中需注意的一些细节