<p>作为非常规入门的开篇,本系列将会以“信号”为起点,徐徐步入编程的世界。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-19256a575bed70f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p/><p><strong>一、信号与信息</strong></p><p>假定某一天,你的基友/闺蜜突然向你发来了一条消息:“···---···”。这时,你可能会疑惑,他/她为什么给你发来这样一串不知含义的字符,而当你上网查询到一些信息时,才知道这串字符的含义是“SOS”。而当你正以为你的基友/闺蜜可能遭遇危险,需要你的帮助时,他/她发来消息说:“只是一个恶作剧。”此时你极有可能非常无语。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-a48fc00c9cfb8b74.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>当然,在如今的社会,几乎没有人不知道莫斯电码是由两种不同的符号组成的。至于具体细节,每个人的了解各有不同。</p><p>在上述的例子中,两种不同的符号就是“信号”,而针对不同组合的“信号”,人们为其赋予不同的含义,那么信号传达出特定的含义就是信号所携带的“信息”。</p><p>“信号”是物理的,可以是任何相对明确的物理量,如:粒子、波、颜色、文字、力等,是客观的。</p><p>而“信息”是抽象的,所谓抽象的就是“摸不着、看不见、闻不到”,信息只存在于人的思维中,是主观的。
</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-7dcfad4dd43c1482.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>“信号”只在有人的参与时,才可能会携带一定的“信息”。“信息”必须被人明确赋予给指定的“信号”。</p><p>一个“信号”可能携带多个“信息”,但一个“信息”原则上只能对应一个“信号”。</p><p>至此,可能会有小伙伴发出疑问:“不是要入门C语言吗?怎么讲这么一堆没用的东西嘞?”</p><p>因为这俩兄弟涉及到一个至关重要的概念——“抽象”。那“信号”与“信息”同“抽象”有何关系呢?</p><p>“抽象”可是非常规入门C语言或其他编程技术的钥匙。那什么是抽象呢?</p><p>抽象其实就是将某“信息”蕴含在某一“信号”中的过程。这里的“抽象”是一个动词,而非形容词。说人话就是“简化,用简单的东西代替复杂的东西”。</p><p><strong>举一个小栗子:</strong></p><p>“π”这个符号相信小伙伴们都认识,而且肯定知道它代表的含义什么。那为什么这个符号代表圆周率呢?因为在初等数学中,就是这样规定的。于是,在解决初等数学问题时,凡是需要用到圆周率的地方,就会使用这个符号来表示。而“使用‘π’表达圆周率”的过程就是抽象。</p><p>在入门编程技术时,抽象就意味着我们不必再关心某事物的内部细节,就如同,使用“π”时,我们不会再纠结需要保留小数点后几位。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-19256a575bed70f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p><strong>小插曲</strong>
</p><p>1942年阿塔纳索夫成功测试了其研制的世界上第一台电子数字计算设备(ABC计算机)。ABC计算机开创了现代计算机的重要元素,包括二进制算术和电子开关。<strong>
</strong></p><p>至今,国内教科书中,仍然泛滥着“世界上第一台电子计算机是ENIAC”的字样。</p><p>ENIAC于1943年开始制造,完成于1946年2月,但是它的设计思想基本来源于ABC,只是采用了更多的电子管,运算能力更强大,主要用于计算弹道和研制氢弹。</p><p>1973年,美国联邦地方法院注销了ENIAC的专利,并得出结论:ENIAC的发明者从阿塔纳索夫那里继承了电子数字计算机的主要构件思想。因此,ABC被认定为世界上第一台计算机。
</p><p>不过,ENIAC是一台十进制计算机,这一点与ABC计算机是大相径庭的。</p><p>事实证明,电子计算机采用二进制更易于电路的设计,也更利于计算机中不同运算的物理实现,同时二进制也将电子计算机的“代价”降到了那个年代的可以被接受的程度。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-19256a575bed70f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p><strong>二、数据与控制</strong>
</p><p/><p>既然选取二进制作为计算机的实现基础,那么二进制的数理逻辑就必须要得到解决。</p><p>深入研究莱布尼茨生平的英国剑桥大学教授李约瑟认为:“二进制应该是起源于《易经》。”让我想到了“中体西用”。</p><p>二进制的最基本逻辑就是“逢二进一”。最基本的算数逻辑就是二进制的加法与减法,其基理和十进制是一样的。</p><p>那么,怎么表示某一些数据呢?其实,很难做出决定,因为要表示数据就需要知道数据范围和数据的具体值。如果需要在设计电路之前就必须考虑通用性,那么用多少位表示一个数据就更重要了,也更加困难了。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-4949b3f91f2a8594.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>
</p><p>嬴寒给出的答案是这样的(很有可能是错的):</p><p>因为人类最熟悉的莫过于十进制,如果按照十进制表示,表示10个数字,只需要1位就可以,范围是0-9。如果按照二进制,为了迎合已有的习惯,就需要使用最少的二进制位来表示0-9,那么答案是4位二进制。</p><p class="image-package">所以,如果需要满足最基本的运算,那么计算机的数据最少需要4位二进制来表示。</p><p>如果需要处理文本,就需要将大小写字母、常用标点符号、文本控制符号(如换行之类的)都需要算在内,可能最少需要7位,再考虑到上个世纪信号传输的不可靠性,这才有了以8位为最小处理长度的约定。</p><p>当然,最小处理长度是可以随意定的。</p><p>而1Byte=8bit也因为长期使用而约定成俗了。事实上,Byte的定义至今仍然是不定的。在一些规范性文档中,你可能看到Octet这样一个词,这个词意指8位为1字节。而Byte到底是多少位,你随意,你高兴、你开心就好。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-4949b3f91f2a8594.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>1024是非常具有特殊性的。他的来源可以说是从十进制中推导而来。因为常用的十进制,在取幂值时总是整的。选取一个与10相关的一个数显然是最明智的。但是又需要考虑到8位的最小处理长度,但是2的8次方并不方便换算,干脆取2的10次方,也就是1024作为单位换算的基准值。这个数有零有整,而其中的24对整个值的影响实在是太小了,所以有时就省略了。。。是不是很无语?而硬盘生产厂商常用的就是1K字节等于1000字节。而系统中,1K就等于1024。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-4949b3f91f2a8594.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>有了数据,有了数据的原始运算,那如何让机器知道我们需要哪种运算呢?这就是控制:控制机器按照我们想要的去执行。</p><p><strong>例如</strong>:有数字A和B,为了让计算机做加法运算,就需要我们向计算机中输入一个控制指令add。</p><p>那么,完成运算后产生的结果总需要存放在某个我们知道的地方吧!那就让这个结果存在“累加寄存器”吧。寄存器顾名思义:就是暂时存数据的地方。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-4949b3f91f2a8594.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>这一系列的主题是“非常规C语言入门”,所以为了快速入门C语言,关于计算机体系结构的内容都省略了。</p>
非常规入门C语言:1、信号、信息、数据、控制
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 在前文的引入数据和数据类型的基础上,本文将逐步说明编程语言的数理逻辑。 在传统的计算机体系结构中,数理逻辑建立在二...
- 程序 = 数据结构 + 算法 “数据结构和算法是过去 50 年来最重要的发明之一,它们是软件工程师需要了解的基础工...