[Python学习日记-20] 彻底搞懂二进制

news2024/12/25 7:18:09

[Python学习日记-20] 彻底搞懂二进制

简介

二进制的定义

二进制与十进制的转换

简介

        在介绍二进制之前我们先讲一个引子,想必大家知道长城吧,长城上面每一个岗哨都会有很多个窗口,哨顶还会放狼烟。那大家知道古时候的中国是如何通信的吗?假如,战国时期两个国家要打仗了,我们垒了城墙,每隔一段就有士兵镇守,现在有人来攻打我们了,然后我们是不是得通知其他人,有人来打我们来了?那士兵应该怎么通知呢?我帮大家想了一下几个办法:

  1. 派个人快马加鞭跑着去——可能来回都要1个月,可能仗都打完了
  2. 使用飞鸽传书——中途鸽子被人打下来了,做成了烤乳鸽
  3. 点狼烟发送信号——这个好像比较靠谱

        没错古代就是这样子做的,还有一个比较著名的典故——烽火戏诸侯。那现在又面临一个问题了,假如现在有5000精兵来打你了,你点了根狼烟搬救兵,从东边来了10个人,西边来了10个人,20个人来了,加起来才40个人,40对5000诸葛亮来了都打不过啊。有大聪明就想到了,我们不能这么保守了,只要我一点狼烟说有人来打我们了,先来他10000人,结果来了200个敌人,我们呼啦啦来一大堆人,仗是打赢了,不过这10000人所消耗的资源是不是有点浪费啊?

        这样看来我们不能只单单告诉后方有敌人来了,还要告诉后方这次来了多少人。这个时候大聪明又说我知道了!来一个人点一根,来了5000人,点5000根。到最后不用打了,自己给自己烧死了。再换个思路我们就约定,来10个人点1根,来100个人点2根,来1000个人点3根,来5000个点4根,来10000个点5根...以此类推,恭喜你,这样确实就能解决问题啦,粗略的能告诉友军来了多少敌人。

        当你非常开心等着援军的时候,将军提了一个变态的要求:我们要对齐颗粒度,必须精确的告诉他一共来了多少敌人,他才安排来救援。那该如何精确传送到底有多少个敌人?最后想了一个办法:

        假如我们有20个狼烟孔,狠烟孔点燃了代表有人,没点燃代表没人。

        这个时候来了1个敌人,士兵点燃了1根狼烟

        现在2个敌人来了,把第1个狼烟孔灭掉,点燃第2个,这样只点燃第2个孔就代表2个人

        现在3个敌人来了,把第1个狼烟孔点着了就表示3个人

        那如果来了4个人敌人,现在有2根狼烟都点着了只能表示3个人,表示4个人,做得到么?我们分析一下前面的0-3个人表达的形式,我们会发现一开始想用一根狼烟表达1个人,正常来说2根狼烟应该只能表示2个人,那现在居然可以表示4种状态(0,1,2,3)。看着眼下这4个敌人,用2根狼烟已经装不下他们了,那我们再点1根,同时要灭掉前面的2根,因为第3根这一根狼烟就可以表示4个敌人

        接下来以此类推,烟不够了就往后多点一根,最终就出现这样的情况了

        经过计算这里一共是236个敌人。到此,终于完成了你上级下达的变态要求了。现在我们借助 Python 中的 bin() 方法来验证一下这个算得正不正确,代码如下

print(bin(236))

代码输出如下:  

        像上述那样算是非常低效的方法,算敌人个数时,你要把每个亮的狼烟孔加起来,亮的孔越多,需要加的越多,所以算的越慢。其实也有快速算法,每个孔所代表的值就是此孔及其前面孔的多少次方,如下图所示

二进制的定义

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

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

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

二进制与十进制的转换

        在简介的引子中其实我们已经进行过这一过程了,刚才已经发现,二进制的第 n 位代表的十进制值都刚好遵循着2的 n 次方这个规律,但是在进行人工转换时2^7等于128这种计算有时候也很难反应过来,如果借助计算机就没有这个烦恼了 Python 中可以借助 int() 和 bin() 来进行十进制和二进制转换

print(int(0b10100))    # 十进制20,在写二进制时一定要在前面加 0b 
print(bin(200))

代码输出如下: 

        当然我们也不能忽略人工计算,这里我们可以先列出 2的 n 次方的好几位出来,然后逐个进行填位,如下图所示

1286432168421
2010100
20011001000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2134641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Telegram Bot 配置指南:使用 Cloudflare Worker 部署

本指南将教您如何创建一个 Telegram Bot 并使用 Cloudflare Worker 部署它。 1. 创建 Telegram Bot 在 Telegram 中搜索 “BotFather”。向 BotFather 发送 /newbot 命令。按照提示设置 bot 的名称和用户名。完成后,您将收到一个 API Token,请妥善保存…

钻机、塔吊等大型工程设备,如何远程维护、实时采集运行数据?

在建筑和工程领域,重型设备的应用不可或缺,无论是在道路与桥梁建设、高层建筑施工,还是在风电、石油等能源项目的开发中,都会用到塔吊、钻机等大型机械工程设备。 随着数字化升级、工业4.0成为行业发展趋势,为了进一步…

N2O(一氧化二氮)的广泛应用与笑气传感器技术

N2O(一氧化二氮),俗称“笑气”,因其独特的物理化学性质而广泛应用于多个高科技领域,包括航空航天、汽车加速系统以及环保监测等。工采网小编将深入探讨N2O的广泛应用及其在现代科技中的重要性,并特别介绍两…

我平时是怎么找客户的?今天我的实战技巧,分享给大家

我常用的几个方法 1、利用WhatsApp,找客户的号码,去进行营销 学会这个方法,WhatsApp账号都能被你找到http://mp.weixin.qq.com/s?__bizMzg2MTcxNzAwMg&mid2247498845&idx1&sn039a87d60094cf6c166e2cf5e1f94a69&chksmce106…

千亿级日志系统架构演进

在度假线路类商品系统中,由于商品结构复杂,涉及底层数据表上千张,在日常供应商以及业务维护过程中,每日产生6亿的数据变动记录。这些数据的变动留痕,不但可供录入方查看,也对日常产研的排障起着至关重要的作…

使用 SSM 框架编写的解决方案

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

如何微调(Fine-tuning)大语言模型?

 导读 本文介绍了微调的基本概念,以及如何对语言模型进行微调。 从 GPT3 到 ChatGPT、从GPT4 到 GitHub copilot的过程,微调在其中扮演了重要角色。什么是微调(fine-tuning)?微调能解决什么问题&#xf…

Java | Leetcode Java题解之第401题二进制手表

题目&#xff1a; 题解&#xff1a; class Solution {public List<String> readBinaryWatch(int turnedOn) {List<String> ans new ArrayList<String>();for (int i 0; i < 1024; i) {int h i >> 6, m i & 63; // 用位运算取出高 4 位和低…

unity3d入门教程四

unity3d入门教程四 10.1坐标与旋转10.2物体的运动10.3&#xff08;练习&#xff09;掉头飞行11.1向量11.2向量间运算11.3向量夹角11.4物体的指向11.5&#xff08;练习&#xff09;飞向目标12.1屏幕坐标12.2屏幕的边界 10.1坐标与旋转 比如&#xff0c;节点的坐标用 Vector3 类型…

Python 常用模块(二):json模块

目录 1. json 模块介绍1.1 json 模块快用导航1.2 什么是JSON1.2.1 JSON的特点1.2.2 JSON的基本语法1.2.3 JSON数据类型1.2.4 JSON示例1.2.5 JSON使用场景1.2.6 JSON的优缺点1.2.7 JSON和XML的比较 1.3 json 模块 2. dump() 方法 --- 转换为 JSON 格式写入文件2.1 语法参考2.2 实…

电巢科技2024中国光博会圆满收官

2024年9月11日-13日&#xff0c;备受瞩目的第二十五届中国国际光电博览会(CIOE中国光博会)在中国深圳国际会展中心圆满闭幕。 电巢科技以其前沿的Ecosmos元宇宙产品体验区&#xff0c;及联袂中国光博会打造的三大特色栏目——《逛展最前线》《光引未来大咖说》以及《智能消费电…

【Linux】查看操作系统开机时初始化的驱动模块列表的一个方法

这个方法是摸索出来的&#xff0c;也不一定对&#xff1a; 1、驱动层module_init(module_init_function)作为模块初始化&#xff0c;并且提供模块内部初始化的函数名&#xff1b; 2、找到所有驱动目录drivers下所有module_init(module_init_function)&#xff0c;在内核6.9.0…

探索 Python 代码重构的魔法:rope 库的神秘力量

文章目录 探索 Python 代码重构的魔法&#xff1a;rope 库的神秘力量背景&#xff1a;为何选择 rope&#xff1f;什么是 rope&#xff1f;如何安装 rope&#xff1f;简单的库函数使用方法场景应用常见问题与解决方案总结 探索 Python 代码重构的魔法&#xff1a;rope 库的神秘力…

影视直冲?对接卡券特权充值接口对于用户来说有什么优势?

对用户来说有哪些优势&#xff1a; 便利性&#xff1a;用户可以直接在应用程序或网站上充值和使用卡券&#xff0c;无需通过多个平台或渠道&#xff0c;提高了用户体验。实时性&#xff1a;卡券充值和使用状态可以实时更新&#xff0c;用户可以立即看到余额变化和卡券状态。安…

建造者模式:灵活构建复杂对象的利器

在软件开发中&#xff0c;创建一个复杂对象通常需要多个步骤和参数&#xff0c;直接在客户端代码中进行这些操作不仅繁琐&#xff0c;而且难以维护。建造者模式&#xff08;Builder Pattern&#xff09;提供了一种优雅的解决方案&#xff0c;使得对象的创建过程更加清晰、灵活和…

以最小成本实现最大销售:《稻盛和夫的实学:经营与会计》中的企业经营哲学

在《经营与会计》中稻盛和夫提出&#xff0c;会计是现代企业经营的中枢&#xff0c;经营者必须掌握企业活动的真实状态&#xff0c;才能带领企业长期持续的发展。 经营企业要以现金为基础&#xff0c;把握赚的钱在哪里&#xff0c;以什么形式存在&#xff0c;根据手上确凿无疑…

技术分享-商城篇-营销模块-优惠券种类(二十六)

前言 在之前的文章技术分享-商城篇-优惠券管理-功能介绍及种类&#xff08;二十四&#xff09; &#xff0c;有对优惠券设计做了阐述&#xff0c;优惠券作为一种强大的促销工具&#xff0c;不仅能够吸引新客户&#xff0c;还能促进现有客户的复购与订单金额的提升。但是优惠券…

HTML+CSS - 网页布局之网格布局

1. dispaly设置 display是 CSS 中用于设置元素的显示方式的属性。它决定了元素如何被渲染到页面上。不同的display值会改变元素的显示行为&#xff0c;包括布局、排版以及对其他元素的影响。 其中网格容器是最常用的几种方式之一&#xff0c;在文档中创建类似于网格的效果&…

迷你洗衣机哪个牌子好又实惠?5大主流产品综合实测分享!

在日常生活中&#xff0c;内衣洗衣机已成为现代家庭必备的重要家电之一。选择一款耐用、质量优秀的内衣洗衣机&#xff0c;不仅可以减少洗衣负担&#xff0c;还能提供高效的洗涤效果。然而&#xff0c;市场上众多内衣洗衣机品牌琳琅满目&#xff0c;让我们往往难以选择。那么&a…

有性价比高的无线蓝牙耳机吗?四款适合学生党的开放式耳机推荐

最近也是大学生高中生都开学了&#xff0c;我想很多学生都想寻找一款性价比高的真无线蓝牙耳机来提升学习和休闲时的音频体验吧。但是市场上的蓝牙耳机品牌和型号繁多&#xff0c;所以并非所有都适合学生群体的预算和需求。只能是由比较专业的耳机测评专家来推荐给学生党入手了…