IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 2021-07-10在提瓦特学C语言 part2 第二章 脚下的土地——初识“计算机和C” -> 正文阅读

[C++知识库]2021-07-10在提瓦特学C语言 part2 第二章 脚下的土地——初识“计算机和C”

? ? ?漫步到王国的城墙外,你在风起地外遇到的吟游诗人向你介绍这片大陆的故事。

?? ? 这片大陆历史悠久,它由电这种元素构成海,由硅构成山,世间万物无不出自电和硅构成的山海,而不同的语言则是驱动山海构成世间万物的工具,前边的C王国就是使用C语言的人们构成的国家。籍由山海的交错流动,人们就可以做到许多伟大的工作。

?? ? 而C语言不仅在C王国流行,它也活跃在世界不同的大陆的方方面面,从20世纪80年代UNIX上的主流语言,到微型机和大型机,再到现在各类游戏、应用等等,它紧凑而高效,易于修改,可移植性强,因为对于不同的计算机CPU而言,虽然指令集不同,但通过编译器,就可以将C翻译成不同CPU适用的指令,从而实现旅行者(程序员)所想表达的功能,它对世界上所有的旅行者都非常友好,无论是C语言高玩还是萌新小白,稍加练习都能对C顺利把玩。

? ? ? 而在学习C语言的时候,最好对C王国甚至这个世界有基本了解,理解世界的运行规则,会更好的理解C语言在帮助C王国在这个世界上存活、兴盛甚至强大的作用。吟游诗人说。下面我们来了解这个世界的构成和运行规则。

? ? ? 这个世界的国家由多种部分构成。有的国家采取传统的封建君主专制,国王【中央处理单元】(CPU)承担绝大部分的运算工作。而国王身边的内阁大臣们【随机存储单元】(RAM)(存储程序和文件的工作区)是为国王呈递和暂时存放工作任务的人员,毕竟国王精力有限,不可能同时处理多样政事,这时候就需要有人暂时拿着这些任务,以便国王处理完后接着处理,提高效率,我们所说的(单核多线程)就是一个国王处理多件任务,他们只能并发(一并发到内阁待国王处理)而不能一同进行,就是并行。而这个世界的有些国家不同于这个国家(单核CPU),他们是采取多权并立(双核),甚至是议会制(多核),他们不只有一个思考决策的“国王”,而是有多个决策者,他们可以同时决策处理多个任务,这就是多核多线程,他们是真正的多线程,真正的并行;而一个国家除了决策机关,还有许许多多数量庞大的档案馆,也就是内存;因为任务有别,有些只需要处理而无需储存,例如今天中午吃白切鸡还是三杯鸡等等;而有些重要任务则需要存档记录,例如对地震的救灾指示等,但这些指示往往要根据实际情况更新,因此这些数据是允许被更改与更新的;而有些数据一旦处理完,则不允许后人篡改的,例如史记等等,这些则需要存进档案馆的特殊区域,也就是永久储存内存(ROM)(机械硬盘,固态硬盘等)即使在夜晚王国进入梦乡(关闭计算 机)后,也不会丢失之前储存在档案馆的程序和文件,而在RAM里的文件则很快消散在电子的流动之间。CPU,也就是国王,它负责处理程序,决策运算,接下来我们重点讨论它的工作原理。

? ? 国王的工作非常简单,至少从字面上看是这样。它从内存(RAM或者ROM)中获取并执行一条指令,然后再从内存中获取并执行下一条指令,诸如此类,CPU 能以惊人的速度完成一些枯燥的运算和处理工作。CPU 有自己的工作区——由若干个寄存器组成,每个寄存器都可以储存一个数字

这里提前补充一下后面的知识,即,在计算机里,在这个大陆上,一切子民、数据的储存处的地址都是由一串数字组成,而寄存器储存的数字就是这一串需要处理的任务的“地址”,例如王国的某处地方发生地震,现在国王需要决策救灾计划,那么发生地震等待救灾的地方的名字则相当于“地址”国王不可能亲身前往震中,那么知道救灾地址以便利救援就很重要了,这里只是类比,原理并不尽相同。在处理完一个“任务”,也就是指令后,一个寄存器储存下一条指令的内存地址,CPU 使用该地址来获取和更新下一条指令。在获取指令后,CPU在 另一个寄存器中储存该指令,并更新第1个寄存器储存下一条指令的地址。 CPU能理解的指令有限(这些指令的集合叫作指令集,指令集对于一个国王而言相当于行事准则或者先帝谏言)指令集一般储存在CPU的ROM内,并且一般在CPU在光刻机刻录时已经刻好,且不允许用户私自更改。而且,这些指令相当具体,其中的许多指令都是用于请求计算机把一个数字从一个位置移动到另一个位置。例如,从内存移动到寄存器。就是这些再基础不过的指令的不断、交错、组合调用,让CPU做到了许多复杂、伟大的运算。

计算机语言发展图(from:http://www.mahaixiang.cn/bcyy/2048.html)图侵删

? ? ? 噢,关于这片大陆(计算机)内的所有数据,全部是以“数字”的形式存在和储存的,再具体而言,是无数个“0”和“1”交错组成了每一样事物,为什么要这样定义和存在呢,其实这片大陆最原始最原始的原住民使用的是“机器码”,一种最接近这个世界的本质,这个世界最原初的组成,0代表着以电为元素的海洋的退潮,或者说低水位(低电位),而1则代表着海洋升起,高水位(高电位),先民通过0和1挥动海水在山峦(硅刻电路)之间流动,从而实现伟大的创造;但是这种指挥实在太过晦涩难懂,在先民的文明不断发展时,人们发现这种语言已经阻碍了文明的发展,于是人们想,既然让海水向前只有abc三个步骤,那我能不能用“向前”这个指令来代表原来abc呢,这样我就可以节省命令的时间,加快效率了!这样的用助记符代替了机器语言操作码,用地址符号或标号代替二进制地址码,或者说将以前所做的一个个动作或者说步骤的集合组合起来,然后将他们命名而来的语言,叫做“汇编”,而人们发现,不同地域的人,将同一个“动作”常常称为不同的名字,例如abc这个指令,北方的人叫“猫咪跳”,南方的人称为“小狗跳”,这样不利于文化交流,于是一个英明的君主就将abc这一个动作规定成大家都认可的名字:“猫狗跳”,并且写进法律和史书内,规定不能改动,记录这些行动的名称的法律叫做“库”。这告诉我们,差异会让文化灿烂,而统一会让文化强盛,在书同文之后,汇编语言席卷整个大陆,先民的文明得到了极大的繁荣。

? ? ? 但是再精巧的语言,都会有人想更进一步,虽然汇编语言极大精简了语言,但本质上它还没有脱离机器码,它还是不够好学好用。先民里的数学家最不满意汇编语言,为什么,因为小小的一个乘法,居然要用加法来解决,小型工程还好说,大型工程往往一生穷尽都无法算完。怎么办,既然它还不够好,那我们就开发更好的,于是,高级语言诞生了。B语言,C语言,C++,再到今年的Python,Swift等等,他们更接近人们自然语言的使用习惯,好学好用,但是与当年的用“0”“1”操控山海已经相距甚远了,效率大打折扣,但是仍受追捧,证明了他们的优越性,这是我们进入C王国,学习C语言的原因,而C语言继承了先民使用的汇编语言“库”的概念,这可以说是汇编语言优越的一面,因此C兼具优美简洁与简单高效之特点。

? ? ? 这里强调一点,本质上“山”并不会“移动”(不论以“水”为参照物,涉及运动的定义),只是“水流”,也就是“电”在流动、变化,山海相移可以理解为文学手法吧(笑)

? ? ? 前面说到,C属于高级语言的一种(尽管它仍然具有许多低级语言的特性),它更为接近使用者的语言与思考习惯,但是这片大陆的山海并不直接受高级语言的控制,为什么?

例如:all=old+add

? ? ? 这似乎很好阅读和理解,所有的(物品)=已有的(old)加上增加的;

? ? ? 光看这行代码就知道要计算机做什么;而看用机器语写成的同样效果指令则十分难受。这种感觉对计算机而言却恰恰相反。在它看来,这串东西就是一堆无法理解的乐色数据。山海相移只听机器码的号令,也就是最基础的“0”“1”。于是人们发明了编译器,类似于翻译机,他们负责把高级的语言转化成机器语言的程序。这样,人们负责用高级语言将自己的奇思妙想描绘,而编译器则负责处理冗长乏味的细节工作。

? ? ? 编译器在不同大陆(不同计算机/CPU)中也可发挥奇效(甚至架构不同),例如,用Intel Core i9(x86架构)编写的机器语言程序对于Apple M1 芯片(ARM)而言什么都不是。但是,可以找到与特定类型 CPU匹配的编译器,像Apple的Rosetta 2编(转)译器,声称转换性能损失率仅百分之19。btw,高级语言以更接近人的方式方式描述行动,不受限于CPU或指令集之种类。它的出现为高级语言横扫整片大陆扫清了最后一道障碍,而这片大陆,曾被汇编语言支配。

?? ? 说了那么多,怎么使用C设计一个任务解决方案(程序)呢?

? ? ?此处参考C Primer Plus 的叙述方式。

?注:图片源自于网络 如有侵权请联系删除

第1步:定义程序的目标

在动手写程序之前,要想,我要程序去做什么?首先自己要明确自己想做什么(Target),思考你的程序需要哪些信息(Info),要进行哪些计算和控制,以及程序应该要报告什么信息(Check&Reflect)。在这一步骤可以用自己的语言或者伪代码来描述。

第2步:设计程序

用户想要什么?如何安排程序?目标用户?怎么实现?最优路径?设置debug点?对程序应该完成什么任务有认识之后,就应该考虑如何用程序实现目标。此处仍然不涉及具体代码,你只需要用你喜欢的方法把大局定夺,无需关注细枝末节。

第3步:编写代码

设计好程序后,就可以编写代码来实现它。把你设计的程序 翻译成 C语言。这里是真正需要使用C语言的地方。你可以直接在IDE(集成开发环境)上书写,你也可以在文本编辑器(Win中笔记本)里书写。在这一步骤中,应该给自己编写的程序添加文字注释。注释是前人留给后来使用者的善意,也是方便自己修改、调试的标记。

第4步:编译

编译器是把源代码转换成可执行代码的程序。可执行代码是用计算机的机器语言表示的代码。这种语言由数字码表示的指令组成。如前所述,不同的计算机使用不同的机器语言方案。

C 编译器负责把C代码翻译成特定机器语。此外,C编译器还将源代码与库中的代码合并成最终的程序,库是个很有趣的概念,你可以根据前文理解,如果你有更好的解释,那也无妨。

你可以将上面的行为理解成“链接”。其结果是,生成一个用户可以运行的可执行文 件,其中包含着计算机能理解的代码。编译器还会检查C语言程序是否”正确”,当然这种正确是合乎规范,而不是我们理解的可以跑出完美的程序。如果C编译器发现错误,就不生成可执行文件并报错,这里的报错并不一定准确且有可能会在错误点下一行报错,阅读报错信息,设置合适的断点(熔点)来debug是必须掌握的。

第5步:运行

一般上,可执行文件是可运行的程序。在IDE中点击Run来运行程序,报错和警告一般出现在摁下Run的这一刻。

第6步:测试和调试程序

如果Run成功了,你的程序就是”合乎规范”的,但是否是“正确”的,还要看运行情况。如果程序不如你所想,亦或者出现运行错误。接下来,你应该检查程序的源码了!源码中的错误, 码农黑话叫作bug。查找、修复bug的过程叫debug(调试)。错误是无可避免的,耶稣写的程序才没有bug,当然耶稣不会写的话,似乎也算没有bug,总而言之,勇敢的向前走,有bug弟bug(debug),无bug优化,加油,勇敢的少年成为神话吧。

???????编程不是按部就班的一个线性的过程,他常常在不同的步骤间跳跃,例如有的人喜欢详细规划万无一失再编程,有的人喜欢直接撸码,车到山前必有路,柳暗花明又一bug,这种也很有乐趣,但常常会挠头欢呼顿首垂足吧,无论框架是在纸面搭建还是胸有成竹,习惯的就是最好的。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-11 16:27:42  更:2021-07-11 16:29:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 22:06:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码