二进制
---->ASCII :只能存英文和拉丁字符。一个字符占一个字节,8位
----->gb2312:只能6700多个中文,1980
------->gbk1.0:村落2万多字符,1995
--------> gb18030:2000 ,27000中文 ---------> unicode: utf-32: 一个字符占4个字节
utf-16: 一个字符占2个字节或2个以上
utf-8: 一个英文用ASCII 码来存,一个中文占3个字节 in python2
默认编码是ASCII码 in python3
默认是unicode
encode会在编码的同时,会把数据转成byte类型
encode会在解码的同时,会把byte类型转成字符串
b = byte = 字节类型 单独的一个数据类型 = 【0-255】

假如,战国时期两个国家要打仗了,我们垒了城墙,每隔一段就有兵镇守,现在有人来攻打我们了,然后我们是不是得通知其他人有人来打我们来了?怎么通知?

 
    1. 派个人跑着去?等人回来,仗打完了
 
    1. 飞鸽传书?不靠谱,鸽子会被敌人射下来做烧烤
 
    1. 点狼烟信号,可行
 

好了,现在有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个敌人




接下来我们以此类推,烟不够了就往后多点一根,最终就出现这样的情况了,各位算算这是多少敌人?



很简单,把红色柱子代表的值加起来就行了对吧,一共247个敌人。


到此,友军将领的变态需求终于满足啦。。。


最后补充下,算敌人个数时,你要把每个红柱子加起来,柱子越多,算的越慢。 其实有快速算法,你发现没有,每根柱子所代表的值 就是此柱及其前面柱子的多少次方。



好,同学们,快帮我算出来,如果来61352个敌人的话,狼烟如何排列?



二进制定义


二进制是计算技术中广泛采用的一种数制二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的都是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。


我们发现刚刚我们讲述的狼烟的故事和现在这个新理论出奇相似。假设狼烟点燃用1表示,狼烟灭掉用0表示,那么刚刚我们用狼烟表示百万雄师的理论就可以用在计算机上,这种表示数字的方式就叫做二进制。


你可能会觉得发明计算机的人思路轻奇,为什么要多此一举的用这种方式来表达数字,但事实上计算机不像我们这样智能,CPU是一个包含上亿个精巧的晶体管的芯片集合,晶体管表达感情的方式很简单,就是通过高低电压(有电没电),低电压的时候表示0,高电压的时候表示1,因此最终能让计算机理解的就只有0和1而已。


二进制与十进制转换


其实刚刚在无形中我们已经将10进制转换成2进制了,现在我们要再总结一遍。


刚才我们已经发现,二进制的第n位代表的十进制值都刚好遵循着2的n次方这个规律


填位大法:


先把他们代表的值依次写出来,然后再根据10进制的值把数填到相应位置,就好了~~~


十进制转二进制方法相同,只要对照二进制为1的那一位对应的十进制值相加就可以了。


 

Python基本数据结构之二进制的更多相关文章

  1. (python数据分析)第03章 Python的数据结构、函数和文件

    本章讨论Python的内置功能,这些功能本书会用到很多.虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具一同使用的. 我们会从Python最基础 ...

  2. python的数据结构分类,以及数字的处理函数,类型判断

    python的数据结构分类: 数值型 int:python3中都是长整形,没有大小限制,受限内存区域的大小 float:只有双精度型 complex:实数和虚数部分都是浮点型,1+1.2J bool: ...

  3. python 与数据结构

    在上面的文章中,我写了python中的一些特性,主要是简单为主,主要是因为一些其他复杂的东西可以通过简单的知识演变而来,比如装饰器还可以带参数,可以使用装饰类,在类中不同的方法中调用,不想写的太复杂, ...

  4. [0x00 用Python讲解数据结构与算法] 概览

    自从工作后就没什么时间更新博客了,最近抽空学了点Python,觉得Python真的是很强大呀.想来在大学中没有学好数据结构和算法,自己的意志力一直不够坚定,这次想好好看一本书,认真把基本的数据结构和算 ...

  5. python模块介绍- binascii 二进制和ASCII转换

    python模块介绍-binascii二进制和ASCII转换 目录 项目简介 简介: Uu编码 Binhex编码 Base64编码 QP码 CRC校验和 二进制转换 其他实例 项目简介 Python中 ...

  6. Python -- 堆数据结构 heapq - I love this game! - 博客频道 - CSDN.NET

    Python -- 堆数据结构 heapq - I love this game! - 博客频道 - CSDN.NET Python -- 堆数据结构 heapq 分类: Python 2012-09 ...

  7. python实现数据结构单链表

    #python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" ...

  8. 《用Python解决数据结构与算法问题》在线阅读

    源于经典 数据结构作为计算机从业人员的必备基础,Java, c 之类的语言有很多这方面的书籍,Python 相对较少, 其中比较著名的一本 problem-solving-with-algorithm ...

  9. Python 进制转换 二进制 八进制 十进制 十六进制

    Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义一定不 ...

随机推荐

  1. opencv之形态变换

    形态变换 在opencv之膨胀与腐蚀中介绍了Dilation/Erosion的原理.建议先读这一篇,搞懂原理. 这样就可以很轻松地理解为什么本文的这些形态变换可以取得相应的效果. 基于此,我们可以组合 ...

  2. HeidiSQL、Navicat、mysql命令和source命令导入sql脚本的速度比较

    一.四种导入方式的比较 1.heidisql客户端是一条一条插入的,速度最慢,而且很脆弱比较容易崩溃: 2.mysql命令导入380万记录用时1小时13分(属于前台运行的命令,ctrl+c就可以结束) ...

  3. django2.0+反向查询抛异常处理

    一.错误信息 AttributeError: 'RelatedManager' object has no attribute 'lrc' #其中RelatedManager为关键字 二.反向查询的字 ...

  4. 关于sqlmapapi一点记录

    关于sqlmapapi自己练习的还是很少 今天看见freebuf上师傅的分享的内容 自己练习了一下 来自: https://www.freebuf.com/articles/web/204875.ht ...

  5. POWERSPLOIT-Recon(信息侦察)脚本渗透实战

    Recon(信息侦察)模块 a) 调用invoke-Portscan扫描内网主机的端口. 1)通过IEX下载并调用invoke-portscan. PS C:\Users\Administrator& ...

  6. [CODEVS3366] 矿石

    题目描述 Description 经历了千辛万苦,小J找到了N块矿石.这些矿石都有毒性,但只要将两块矿石放在一起,再分开即可解毒.但任一两块矿石都可以互相吸引.为了降低吸引力,小J将他们放入一个直径仅 ...

  7. 数据结构2_java---栈,括号匹配

    package Main; import java.util.Scanner; import javax.swing.text.html.HTMLDocument.HTMLReader.Isindex ...

  8. JQ获取元素属性值

    最近在学习JAVA Web,自己也是做个下列表左右选择的小案例. 获取某个元素的属性值一直以为是要调用atrr方法,不过好像获取元素的数组形式再遍历每个元素的时候想获取到它的属性值用attr方法有问题 ...

  9. 记因git规范导致的提测和发布延迟

    号外 最近因为换工作的原因,我的博客和Github没有像之前那样频繁的更新了.一方面原因是投递简历和准备面试,由于之前的基础没有很扎实,需要把平时的知识点都整理一遍.这个时间段持续了20多天的样子,因 ...

  10. WSL捣鼓记——图形化(以emacs为例)

    前言 这学期开始学习linux,但笔记本装了双系统之后指纹识别会失效,开虚拟机又十分占据内存,于是乎基本需要使用linux的时候就用wsl,可奈何只有命令行界面,在需要使用图形软件(如emacs)的时 ...