Python基础之二进制
引子
首先,计算机一共就能做两件事:计算和通信
那在讲计算机之前,我们先来讲一个故事,大家知道古时候的中国是如何通信的么?
假如,战国时期两个国家要打仗了,我们垒了城墙,每隔一段就有兵镇守,现在有人来攻打我们了,然后我们是不是得通知其他人有人来打我们来了?怎么通知?
1.派个人跑着去?等人回来,仗打完了
2.点狼烟信号
好了,现在有5000精兵来打你了,你点了根狼烟搬救兵,从东边来了10个人,西边来了10个人,20个人来了,和你们一起战死了。
这怎么办?
我们不能这么保守了,只要我一点狼烟说有人来打我们了,先来他10000人,结果来了200个敌人,我们呼啦啦来一大堆人,是不是浪费资源啊?
我们是不是除了告诉人家要打仗了,还得告诉别人来了多少人啊?那我们怎么告诉?
来一个人点一根?来了5000人,点5000根,不用打了,自己给自己烧死了
那好我们就约定,来10个人点1根,来100个人点2根,来1000个人点3根,来5000个点4根,来10000个点5根。。。以此类推
好了现在我们有一个变态的需求,要精确的传送到底有多少个敌人?
每次报告信号之前得把人数清楚了再报告,我们怎么办?
这里让学生自由发挥5分钟
好了,现在来看看我的方法。。。
假如我们有20个狼烟孔,狼烟孔点燃了代表有人,没点燃代表没人。
这时候,1个敌人来了,点1根狼烟
现在2个敌人来了,怎么办?再点一根狼烟,把20根狼烟都点上能表示20个人。。。这肯定不行。我们这样,把
第一个狼烟孔灭掉,点燃第二个,这样只点燃第二个孔就代表两个人
现在3个敌人来了,怎么办?把第一个狼烟孔点着了就表示3个人
那如果来了4个人敌人,现在有两根狼烟都点着了只能表示3个人,表示4个人,做得到么?臣妾做不到啊~~~
但是现在使用2根狼烟原来只能表示2个人,现在我们是不是表达了4种状态(0,1,2,3)(该着重表达原来的一根狼烟只能表达一个人,现在却能表达四种状态了)。
再说眼下这4个敌人,咱们用这两根狼烟已经表现不了了,所以我们只好再点一根,同时我们还要灭掉前面的两根,因为第三根这一根狼烟就可以表示4个敌人
讲啊讲,突然之间发现每一位恰好就是2的n次方!
。。。剩下的你们自己发挥吧。。。
二进制定义
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。
我们发现刚刚我们讲述的狼烟的故事和现在这个新理论出奇相似。假设狼烟点燃用1表示,狼烟灭掉用0表示,那么刚刚我们用狼烟表示百万雄师的理论就可以用在计算机上,这种表示数字的方式就叫做二进制。
你可能会觉得发明计算机的人思路轻奇,为什么要多此一举的用这种方式来表达数字,但事实上计算机不像我们这样智能,CPU是一个包含上百万个精巧的晶体管的芯片集合,晶体管表达感情的方式很简单,就是通过高低电压(有电没电),低电压的时候表示0,高电压的时候表示1,因此最终能让计算机理解的就只有0和1而已。
二进制与十进制转换
其实刚刚在无形中我们已经将10进制转换成2进制了,现在我们要再总结一遍。
刚才我们已经发现,二进制的第n位代表的十进制值都刚好遵循着2的n次方这个规律
填位大法:
先把他们代表的值依次写出来,然后再根据10进制的值把数填到相应位置,就好了~~~
十进制转二进制方法相同,只要对照二进制为1的那一位对应的十进制值相加就可以了。
Python基础之二进制的更多相关文章
- Python之路3【第一篇】Python基础
本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...
- 进击的Python【第三章】:Python基础(三)
Python基础(三) 本章内容 集合的概念与操作 文件的操作 函数的特点与用法 参数与局部变量 return返回值的概念 递归的基本含义 函数式编程介绍 高阶函数的概念 一.集合的概念与操作 集合( ...
- 进击的Python【第二章】:Python基础(二)
Python基础(二) 本章内容 数据类型 数据运算 列表与元组的基本操作 字典的基本操作 字符编码与转码 模块初探 练习:购物车程序 一.数据类型 Python有五个标准的数据类型: Numbers ...
- python基础之文件读写
python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...
- Python基础-字符编码与转码
***了解计算机的底层原理*** Python全栈开发之Python基础-字符编码与转码 需知: 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 ...
- python基础——偏函数
python基础——偏函数 Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函 ...
- 【Python全栈笔记】00 12-14 Oct Linux 和 Python 基础
Linux 基础认识 更加稳定,安全,开源 设置好ssh协议后可以通过windows系统连接Linux,基于ssh协议进行通信 '/' 为根目录 cd / -> 切换到根目录 ls -lh 列出 ...
- Python基础:序列(字符串)
一.概述 字符串 类似于C中的字符数组(功能上更像C++中的string),它是由一个个 字符 组成的序列.与C/C++不同的是,Python中没有 字符 这个类型,而是用 长度为1的字符串 来表示字 ...
- python基础——字符串和编码
python基础——字符串和编码 字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用 ...
随机推荐
- Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc
我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free(). 注意:动态申请的内存使用完后必须要释放,否则会造成内 ...
- MyBatis 为什么需要通用 Mapper ?
一.通用 Mapper 的用途 ? 我个人最早用 MyBatis 时,先是完全手写,然后用上了 MyBatis 代码生成器(简称为 MBG),在使用 MBG 过程中,发现一个很麻烦的问题,如果数据库字 ...
- Struts1的基础知识
struts1.0的配置 在web.xml文件中的配置 <servlet> <!--配置ActionServlet类,一启动就创建该类对象--> <servlet-nam ...
- shell脚本总结
1.变量 A: 定义变量A=1,只会对自己所在的shell进程有效 B: 定义变量export B=1,会对自己所在的shell进程及其子进程生效 C: 在script.sh脚本中定义的变量,在当前 ...
- CPU使用率过高分析方法
项目过程中发现,应用服务器经常会出现CPU使用率较高的情况,需要定位出具体代码问题. 1.用top命令,根据CPU使用率排序,找出消耗cpu最高的进程 2.找出该进程下消耗CPU最高的线程(命令:to ...
- 传统应用迁移到kubernetes(Hadoop YARN)
spark-on-yarn-with-kubernetes 该例子仅用来说明具体的步骤划分和复杂性,在生产环境应用还有待验证,请谨慎使用. 过程中可能用到的概念和术语初步整理如下: 整个迁移过程分为如 ...
- [PyImageSearch] Ubuntu16.04 使用深度学习和OpenCV实现物体检测
上一篇博文中讲到如何用OpenCV实现物体分类,但是接下来这篇博文将会告诉你图片中物体的位置具体在哪里. 我们将会知道如何使用OpenCV‘s的dnn模块去加载一个预训练的物体检测网络,它能使得我们将 ...
- js重写trim()方法
最近项目中出现去空格的需求,我本地是IE11,使用trim()函数的时候,是无法识别的.因此重写String的trim()方法. 1.要求 可以去除首位全角,半角空格. 2.对 能去除所有 Str ...
- api中locale或language字段,传送客户端地域信息,一般为下划线
在请求新闻的分类信息和新闻内容时,需要在api地址中传入local参数,根据用户地区不同返回不同的新闻和分类. local参数,通过navigator.languages[0]获取, 但是,问题来了: ...
- xampp 忘记密码的处理方式.
网上看到一些方法: 大部分是第一种: 方法一 这个方法, 我使用的时候没有生效. -------------- 后来看到另外一种方法 . 直接替换user表的三个文件. 这个方法成功了. xam ...