原始人都能听懂的编程课(1)——要当爸爸的小王是如何发明二进制的

2025 -- 原始人编程-泰班测试 #05 问题分析:每种颜色的玩偶必须全部分给若干孩子,且每个孩子只能获得同一种颜色的玩偶。不公平度就是所有孩子中获得最多玩偶的数量。这个问题可以抽象为一个典型的二分查找应用问题。我们需要找到最小的不公平度,即分配后单个孩子获得的最大玩偶数。时间复杂度:O(m log max_a),其中m是颜色种类数,max_a是最大颜色数量。输入7个孩子,4种颜色玩偶数量为[1,2,3,4] 阅读详情

警告:计算机科班出身的程序员禁止进入!

自从写了上一篇文章以后,一直没有进一步的动作。这些天我一直在思考,我希望自己能做一个课程,这个课程能够给下面这些人提供帮助。
1、非科班出身的绝对小白。希望找到一条路进入编程行业。
2、it行业的其他非编程人员,你或许每天与神秘的程序员打交道,但是却无法了解他们。对他们的神秘咒语——“这个需求实现不了”,完全没有抵抗能力。那么,这系列文章帮你了解编程到底是怎么回事。
今天,我们先来了解一个最简单的问题:

计算机到底是如何工作的?

计算机是由软件和硬件组成的。
硬件就是我们的电脑、手机,这一堆能够摸得着的有实物存在的东西。
而软件呢,你在计算机或者手机屏幕里看到的一切都是软件。
操作系统是软件,office是软件,订餐的app是软件,网站是软件,游戏是软件,播放视频的播放器也是软件。
软件是由程序组成的,而程序是整个电子世界的灵魂。
那么程序到底是如何运转的呢?
程序这东西,说起来很神秘,但实质就是一个文件,一个可执行的文件。
通俗上来说,我们把文件分为两种,一种叫文本文件,一种叫可执行文件。
文本文件,顾名思义,就是文件本身是文本形式,比如咱们常见的TXT文件就是文本文件,我们人能够查看能够读懂。
而可执行文件,基本上是没有办法直接读懂的。不信你用你的记事本打开一个mp4文件试一下。
当然不管是文本文件还是可执行文件,本质上都是二进制文件。因为计算机跟我们人不一样,它只能读懂二进制文件。

什么是二进制?

说起二进制,大家可能觉得很神秘。但是我要说,这其实没什么神秘的。
如果当初由你来发明计算机,你也一定能做出二进制的东西。
不信你跟着我来。
现在我们找一个原始人来解决这个问题。
假设我们有一个原始人叫做小王。
小王现在遇到一个问题。
他老婆晚上要生了但是部落大首领让他晚上去对面山头站岗,防止野生动物半夜猫过来。
小王虽然不情愿,但是领导让加班,还是不得不去的。因为这是福报。
所以,临走之前,他和自己妈说,要是孩子生了,你就告诉我一声。
可是这大晚上的,月黑风高,隔得又远,既看不见,又听不见,怎么告诉你呢。
小王找来找去,哎——家里有一个火把。于是跟他说,要是生了,你就把火把点亮就行了。
几十万年以后,小王的智慧被计算机科学家发扬光大了。
我们把小王的问题稍微抽象一下,就是:
如何用一个火把,来表示两个数字。
在这里插入图片描述
生了是1,没生是0。
用火把点亮表示1,用火把没点亮表示0。
问题解决了。

那如果小王希望知道到底生了几个该怎么办呢?是生了一个,两个,还是三个(小王老婆肚子大,很多人说有可能是三胞胎)。
一个火把显然解决不了问题了,但只需要再加一个火把,我们就能很方便的表示四个数字了。
两个火把全灭就是0;
第一个灭,第二个亮表示1;
第一个亮第二个灭表示2;
两个全亮表示3。
看,是不是完美解决了问题。
在这里插入图片描述

然后我们再扩展一下,3个火把是不是就可以表示8个数字?

4个火把是不是就可以表示16个数字?
5个火把是不是就可以表示32个数字?
6个火把是不是就可以表示64个数字?
是的,小王因为生孩子的问题,一下子茅塞顿开。第二天就向大首领建言,在山头架上六个火把,这样就可以每天汇报山下野牛群有多少野牛可以抓了。
然后我们把火把的亮灭换成0和1,用灭表示0,用亮表示1,下面这一串数字是不是有点眼熟?
在这里插入图片描述

是的,二进制产生了。
几十万年以后,计算机科学家解决问题的方法和小王是一样的。
因为计算机作为电子产品,状态只有两个,有电和没电。
有电代表1,没电代表0。
所以我们就可以用一串1和0代表世界上任意一个数字。

那么除了数字之外,我们是不是还可以用来表示文字呢?
当然可以了,我们只需要规定,一个数字代表一个文字就行了。
英语26个字母,就算加上大小写,52个数字足够了对不对?汉字虽然多一点,但也不过就是字库大一点而已。
所以,到这儿我们就可以得出结论了。
二进制可以记录和表示世界上任何一个概念。
好,解决了二进制的问题,我们接下来来看另外一个问题。

计算机语言如何执行

既然计算机只认识二进制的,那么,我们人类编写的程序语言,是怎么在计算机上执行的呢?

我们还是来看看原始人小王是怎么解决这个问题的吧。
小王的六个火把计划被大首领采纳了。
大首领在山上竖起六个火把,打算给全部落的人传递野牛群的数量。
但是很快就发现,这个PPT演示起来很丰满,执行起来很骨感。
为什么?
最大的问题就是谁能记住什么数量对应怎么点火把啊。
比如今天山下有31头野牛,谁能告诉我该点多少火把,怎么个点法?
大首领一看急了,限令时间,由小王来给大家培训,每个人都必须记住计算方法。
领导的话谁敢不听啊,996也是福报啊。
于是所有部落的人牺牲睡眠时间,啃硬骨头,把算法都给学会了。看见野牛数,咔咔咔咔咔咔一通算,就知道该点几根火把了。
是的,你没看错,最初的计算机语言就是这样的。既然计算机只能读懂二进制的东西,那咱就写二进制的东西给他看。
但是你想一想就知道这东西有多折磨人了。今天在山下看见31头野牛,我咔咔咔咔咔咔一通算,终于算出来了,回头一看,野牛已经跑光了。
所以,这法子不行啊,为了更好的完成部落的信息化建设工作,小王同学必须另辟蹊径啊。
于是小王同学冥思苦想,终于想出一个大力出奇迹的办法。
找两个人,什么事情也不干,专门负责点火。
你也不用去打猎了,你就给我把换算规则背过。给你数量,马上知道点多少火,看见火把,马上知道多少数量。
这解决方案一出来,事情终于简单了。
不管是谁负责找猎物,只要看到了,马上告诉这个人,这个人一听数量,马上就知道该怎么点火,然后就把火炬点起来。找猎物的人专心负责找猎物就行了。
完美。
是的,我们复盘一下小王的解决方案,其实就是找了一个专门的翻译。负责把人类能听懂的数字翻译成二进制,再去点火。
计算机科学家最终的解决方案和这个是一样一样的。
计算机里加一个专门的模块,负责把源代码翻译成机器语言,这样计算机就可以识别了。
而编写程序的人再也不用和01打交道了,他只需要写一些类似英文的程序代码就可以了。
比如if…else…就可以解决“如果怎么样,否则怎么样”的逻辑判断问题。
看下图,源代码需要经过翻译层,翻译成机器语言,计算机才能执行。
在这里插入图片描述

这种编程语言,我们现在把它称之为高级语言。

是的,你现在能听到的几乎所有编程语言,都是高级语言。从上古时代的C,到人到中年的JAVA、PHP、C#,再到后起之秀python、go等等。
当然,根据翻译方式的不同,这些语言其实还可以分成两类。
这儿再举个例子,就比较好理解了。假设你要去见一个国外客户,你不懂他们的语言。这时候你找了一个翻译。但是如何把你要说的话都传递给客户,你有两种方式。
一种是你先把所有的话都写好稿子,然后翻译把它翻译完,直接把翻译好的东西给客户看。
还有一种是你见客户的时候带着翻译去,你说一句,翻译给你翻译一句。
是的,对应计算机,就是下面这张图。
在这里插入图片描述

第一个是先编译再执行,叫编译型语言,典型代表是java,第二个是边解释边执行,叫解释型语言,典型代表是php。
两种类型的语言各有各的优势,编译型语言因为先编译后执行,所以执行效率更高一些,但是灵活度稍逊。解释型语言灵活度更好,但是效率上稍微差一点。但随着计算机语言的发展,目前这两种语言也在互相学习,差异正变得越来越小。

好了,篇幅问题,今天就先说到这里。这是一个系列课程的第一篇,如果你有兴趣,可以关注我的公众号——全栈工程师养成,下次我们讲一讲一个大型的项目到底是如何工作的。

在这里插入图片描述

2024--原始人编程&梦熊联盟--CSP-J模拟赛#5 当这种生物的头的数量小于等于攻击力最高的武器的攻击力时,我们可以一下子击败这种生物,在这之前我们用综合攻击力最高的武器攻击这种生物,我们定义。在图中删去a点,然后看一看u,v是否联通,如果联通的话说明a不在必经之路上,如果不联通说明a在必经之路上。先判定a是否在u,v的必经之路上,再判定b是否在u,v的必经之路上。把a点从图中删去,从b点出发不能到的那些点就一定是s1内那些点。把b点从图中删去,从a点出发不能到的那些点就一定是s2内那些点。小于这种生物的头的数量,我们就无法击败这种生物,输出。 阅读详情

相关推荐

PHPPHP扩展,用于运行WebAssembly二进制文件。-PHP开发

:elephant:+:crab:+:spider_web:= PHP ext-wasm目前仅是实验性的。 该项目的目标是能够直接从PHP运行WebAssembly二进制文件。 太有趣了! 什么是WebAssembly? 引用PHP扩展来运行WebAssembly该项目的目标是能够直接从PHP运行WebAssembly二进制文件。 太有趣了! 什么是WebAssembly? 引用WebAssembly站点:WebAssembly(缩写为Wasm)是基于堆栈的虚拟机的二进制指令格式。 Wasm被设计为可移植目标,用于编译高级语言(如C / C ++ / Rust),从而可以在Web上为客户端和服务器应用程序进行部署。 关于速度:WebAssembly旨在执行

PHP中include/require/include_once/require_once使用总结

http://www.huangyibiao.com/archives/1429

标哥 507

AltiumDesigner 高效封装库管理 -- samacsys插件实战指南

本文详细介绍了如何利用samacsys插件高效管理AltiumDesigner封装库。通过实战指南,指导用户完成插件安装、云端元件搜索与放置,并分享将海量资源整合为个人标准库的管理策略,从而大幅提升PCB设计效率与可靠性,杜绝封装错误。

weixin_28285943的博客 125

php处理二进制,PHP应用:PHP处理二进制数据的实现方法

《PHP应用:PHP处理二进制数据的实现方法》要点:本文介绍了PHP应用:PHP处理二进制数据的实现方法,希望对您有用。如果有疑问,可以联系我们。PHP处理二进制数据需要用到pack()和unpack().PHP编程pack()用来将数据转成二进制数据,使用方法如下:PHP编程pack(“LL”, 0,1);PHP编程pack(“C”, a);PHP编程unpack()可以将二进制数据解析成关系数...

weixin_39922868的博客 441

python等级考试——一级知识点汇总(不包含turtle画图)

本篇文章是针对中国电子学会青少年编程等级考试的,适合初学者以及青少年编程学习者

weixin_65350557的博客 9027

SPSS&Mplus—共同方法偏差(Common Method Bias)控制与检验

共同方法偏差(Common Method Bias)的控制方法:程序控制(Procedural)和统计控制(Statistical)。

m0_54401011的博客 1万+

php之文件载入include, include_once,require,require_once

包含并运行指定文件,可以载入php或html文件 ① include “文件路径”; ② include_once “文件路径”; ③ require “文件路径”; ④ require_once “文件路径”; 使用语法上4个语句都差不多。 1.文件路径1.1 相对路径 include "./page.php";//当前目录page.php 文件 include "

ReadyYes的专栏 1052

PyMiMi实战指南:midas_api配置与连接测试详解

本文详细介绍了PyMiMi库中midas_api的配置与连接测试全流程。从环境准备、API密钥获取,到核心的url_cfg配置函数使用,再到通过test_url进行连接验证,提供了清晰的步骤和代码示例。文章重点解析了配置原理、常见错误排查方法(如401错误、连接超时),并强调了API密钥的安全性管理,帮助用户稳固建立Python与Midas Civil NX之间的自动化通信桥梁。

weixin_29044713的博客 695

2024--原始人编程&梦熊联盟--CSP-J模拟赛#6

去枚举交换的位置,因为该交换操作最多只涉及到了两对对称位置上的字母,其他的都没有影响,于是直接。考虑没有那个交换操作怎么做,要成为回文串的话,两个对称位置上的字母。这道题我把y的初值定位了INT_MIN,应该把它定为0。去枚举涉及到的两对对称位置上的字母是什么就可以了。这道题我骗分直接输出0,过了一个点,得了10分。估分100分,实际得分100分。估分100分,实际得分100分。估分100分,实际得分80分。估分10分,实际得分10分。,无法找出两个不同的数。的其他质因子,必定无解。:将当前数中的质因子。

Aidensunking的博客 1264

AD在建PCB封装时如何添加元器件的3D模型

3D模型

k1ang的博客 1万+

CS5212芯片实战:手把手教你设计DP转VGA转换电路(附完整原理图)

本文详细介绍了CS5212芯片在DP转VGA转换电路设计中的实战应用,包括芯片架构解析、核心电路设计要点、PCB布局与电磁兼容设计、调试技巧及进阶应用开发。通过完整的原理图和实用设计指南,帮助工程师快速掌握高可靠转换器的设计方法,特别适合需要国产化替代方案的场景。

weixin_30576827的博客 390

2025 -- 原始人编程-敏班测试 #05

对于每个持有a[i] > x的人:代码中使用了整数除法来高效计算分配次数:AC代码

Aidensunking的博客 301

OpenClaw用户必看:每天0成本使用OpenClaw!NVIDIA NIM免费大模型接入教程

🚀 OpenClaw接入NVIDIA NIM免费API!glm5、minimax-m2.5等大量模型任选,0成本升级AI助手!💰

XiaoqiangClub的博客 5578

php 执行二进制文件_原始人都能听懂的编程——要当爸爸的小王是如何发明二进制的...

警告:计算机科班出身的程序员禁止进入!自从写了上一篇文章以后,一直没有进一步的动作。这些天我一直在思考,我希望自己能做一个课程,这个课程能够给下面这些人提供帮助。1、非科班出身的绝对小白。希望找到一条路进入编程行业。2、it行业的其他非编程人员,你或许每天与神秘的程序员打交道,但是却无法了解他们。对他们的神秘咒语——“这个需求实现不了”,完全没有抵抗能力。那么,这系列文章帮你了解编程到底是怎么回事...

weixin_39842475的博客 282

【测绘程序设计】——潮汐调和分析

最小二乘潮汐调和分析源码、使用示例及数据

C_xxy's blog 2652

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

2024--原始人编程&梦熊联盟--CSP-J模拟赛#9

这道题是贪心,我们的是把01串变成先有连续的很多个0组成,又由连续的很多个1组成的01串。这道题我们先定义一个set,如果题目让插入元素,则使用insert函数插入,否则我们从所输入的元素的0倍一直往上找,看看有没有不在set中的。这道题我得了90分,因为我没有注意到只有在没有要检查的单词在词表中未出现的情况下才输出第一个相似的单词,我是输出了第一个相同或相似的单词。这道题我得了0分,因为我写了关闭流同步,又写了getchar(),换成cin就好了。来记录,如果一直到最后也没发现相同的单词,就输出。

Aidensunking的博客 1089

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机原始程序,原始程序员竟然是这样写代码的?

原标题:原始程序员竟然是这样写代码的? 如今我们大部分人眼中编程是这样的:一台电脑,一个编辑器,几串代码。彩色的页面,自动缩进,智能联想,隐隐觉得这是一件很艺术的事情。 不过,在几十年前,原始程序员更像电工。世界第一台计算机诞生之时,程序就是巨大的电路板后面的一堆电线,程序员要通过摆弄电线来编程。当时,做这项工作的是六位女士。现在程序员自嘲自己是码农,干的是体力活,第一代程序员真的干的是体力活。 ...

weixin_35143455的博客 2432

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

php中二进制怎么运算,php中二进制运算的作用是什么

经常看到这种二进制运算define("T_CHINESE", 1); //中文define("T_SEP", 1 << 1); //分割符合define("T_NUM", 1 << 2); //数字define("T_INDEX", 1 << 3); //索引define("T_LETTER", 1 << 4); //字母def...

weixin_35679869的博客 308

php5.3二进制包,php使用pack处理二进制文件的方法

php使用pack处理二进制文件的方法文章主要介绍了php使用pack处理二进制文件的方法,需要的朋友可以参考下.php读写二进制文件可以使用pack和unpack函数。天要处理一个二进制文件的问题,所以需要用一下,特意了解一下pack的用法,unpack用法与此类似。简单来说,pack函数就是给一个目标格式,和相应的参数,就可以返回二进制数据了。下面举例加以说明,对于四个整数:pack("L4"...

weixin_34520360的博客 211

linux中的可执行二进制文件执行流程(ELF)

LD_PRELOAD,execve,Linux

gzhu_flyingbird的博客 5167

如何进行二进制文件的读写操作?

进行二进制文件的读写操作是C语言中的常见任务。在处理文件时,您需要打开文件、读取数据、写入数据和关闭文件。使用标准C库函数,如fopenfreadfwrite和fclose,您可以轻松地执行这些操作。同时,要时刻注意错误处理,以确保文件操作不出现问题。二进制文件的读写操作是处理各种文件和数据的关键部分,掌握这些技巧对于C程序员来说非常重要。希望这篇文章对您有所帮助。

weixin_68551689的博客 4290

linux下运行二进制文件

对于前后端完全分离的项目来说,都需要分别打包运行,前端文件就需要打包成二进制文件或者是在windows环境下的.exe文件。在linux下,首先来说需要注意的是要进行更改文件权限的操作使用chmod命令的语法为。表示只有当该文件是个子目录或者该文件已经被设定过为可执行。需要注意的是打包二进制文件是没有后缀名的。如果需要后台使用的话可以用。还有一种是八进制语法。执行二进制文件直接用。...

Array_new的博客 1万+

php 读取二进制文件---笔记

$file_pointer = fopen($file, "r"); $file_read = fread($file_pointer, filesize($file)); //$file_read = fread($file_pointer, 1); fclose($file_pointer); $string = asc2bin(($file_read));//转换为二进制流 11111111

于台人的博客 3102

union all语句优化改写经验分享

1、问题前面几个案例是因为提前生成HEAP TABLE,条件没有提前过滤导致性能问题,今天想跟大家分享一个案例是适合做HEAP TABLE优化的。计划:从计划上对t1表过滤重复两次,从语句中可以看到是union all两部分,一部分是合计,另一部分是分组统计,此时我想到可以先分组统计,再把分组统计结果进行合计,分组统计的结果可以放到临时表中即heap table,从数学角度上讲就是提取公因子。2、改写计划:结果符合预期,性能提升一倍以上。

zcn126的博客 365
下一篇: 原始人都能听懂的编程课(2)——从小王养鸭子看互联网项目如何运行
nethinks
博客等级 码龄18年 2粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值