[TOC]
计算机科学导论学习笔记 前言:当前作为一名IT互联网从业者,计算机技术日新月异,每天都有新概念、新技术的出现,而像我这样的万金油来说,越学到后面就越吃力,遇到瓶颈问题也随之增多,因为本身非科班出身,加之半路出家,针对于计算机基础知识掌握不牢或者说是不完整,所以我痛定思痛,下定决心重新学习计算机相关基础知识,从计算机科学导论,到计算机组成原理,到计算机网络、到操作系统,到数据结构,到程序算法、到应用开发、到安全运维开发。
今天 (2022年9月1日) 便从大神之路-起始篇
,我们要站在巨人们的肩膀上,进行计算机科学导论
的 学习,我将总结学习成果笔记,帮助后续入门学习的朋友。
随着现代计算机的发明,带来了新的学科,即计算机科学(简称计科
)一词上一个非常广泛的概念,在此处我没将其定义为计算机相关的问题
,现在计算机科学
被划分成几个领域,总结归纳为两大类系统领域
和应用领域
.
系统领域:涵盖那些与硬件和软件构成直接有关的领域,例如计算机体系结构、计算机网络、安全问题、操作系统、算法、程序设计语言以及软件工程。
应用领域:涵盖了与计算机使用有关的领域,例如数据库、云物联和人工智能。
参考书籍:【计算机科学导论-第三版 (Foundations Of Computer Science - Third Edition) 】作者: [美] 贝赫鲁兹.佛罗赞 (Behrouz Forouzan) PS: 当下已经第四版了、
参考视频:【计算机导论】计算机科学导论(大神之路-起始篇)
第 2 部分 数据的表示和运算 描述:该部分包括第2 、3 和4 章,我们分别进行如下学习。
第2 章讨论了数字系统,数量如何能使用符号来表示。
第3 章讨论了不同的数据如何存储在计算机中。
第4 章讨论了一些基本的算术运算与位(逻辑)运算。
原文地址: https://mp.weixin.qq.com/s/0LaYhi89ujYQPHuLfwnuiA
4.数据运算 主要讲解存储在计算机中的数据上是如何进行运算,数据的运算可以分为三大类:算术运算、移位运算和逻辑运算。
4.1 逻辑运算 计算机中的数据是以位模式存储的,逻辑运算是指那些应用于模式中的一个二进制位,或在两个模式中相应的两个二进制位的相同基本运算,说人话就是分别针对二进制位进行与、或、非、异或
等操作。
意味着我们可以在位层次上和模式层次上定义逻辑运算,模式层次上的逻辑运算是具有相同类型的位层次上的n个逻辑运算,这里的n就是模式中的位的数目。
(1) 位层次上的逻辑运算 一个位可能是0或1,可以假设“0”代表逻辑“假”,而“1”代表逻辑“真”,我们可以应用布尔代数
中定义的运算去操纵二进制位为纪念乔治•布尔(George Boole)
而命名的布尔代数属于逻辑的特殊数学领域.
与、或、非、异或
逻辑 与
(AND) 运算: 常用运算符&
表示, 只要一假都为假, 即参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
。
逻辑 或
(OR) 运算:常用运算符|
表示, 只要一真都为真, 即只要对应的二个二进位有一个为1时,结果位就为1
。
逻辑 非
(NOT) 运算:常用运算符!
表示, 一假变一真,一真变一假, 即一个二进制位为1在进行非运算后结果为0,反之为0时经过非运算后结果为1
。
逻辑 异或
(XOR) 运算 (发音为“ exclusive-or”):常用运算符^
表示, 真假为真,真真为假,假假也为假, 即当两对应的二进位相异(分别为0、1)时其结果为1
。
XOR 运算符并不是一个新的运算符,其只是 AND 、OR 、NOT 运算符的组合。
例如 x XOR y = [ x AND (NOT y) ] OR [ (NOT x) AND y ]
例如,与、或、非、异或位逻辑运算示例
[TOC]
计算机科学导论学习笔记 前言:当前作为一名IT互联网从业者,计算机技术日新月异,每天都有新概念、新技术的出现,而像我这样的万金油来说,越学到后面就越吃力,遇到瓶颈问题也随之增多,因为本身非科班出身,加之半路出家,针对于计算机基础知识掌握不牢或者说是不完整,所以我痛定思痛,下定决心重新学习计算机相关基础知识,从计算机科学导论,到计算机组成原理,到计算机网络、到操作系统,到数据结构,到程序算法、到应用开发、到安全运维开发。
今天 (2022年9月1日) 便从大神之路-起始篇
,我们要站在巨人们的肩膀上,进行计算机科学导论
的 学习,我将总结学习成果笔记,帮助后续入门学习的朋友。
随着现代计算机的发明,带来了新的学科,即计算机科学(简称计科
)一词上一个非常广泛的概念,在此处我没将其定义为计算机相关的问题
,现在计算机科学
被划分成几个领域,总结归纳为两大类系统领域
和应用领域
.
系统领域:涵盖那些与硬件和软件构成直接有关的领域,例如计算机体系结构、计算机网络、安全问题、操作系统、算法、程序设计语言以及软件工程。
应用领域:涵盖了与计算机使用有关的领域,例如数据库、云物联和人工智能。
参考书籍:【计算机科学导论-第三版 (Foundations Of Computer Science - Third Edition) 】作者: [美] 贝赫鲁兹.佛罗赞 (Behrouz Forouzan) PS: 当下已经第四版了、
参考视频:【计算机导论】计算机科学导论(大神之路-起始篇)
第 2 部分 数据的表示和运算 描述:该部分包括第2 、3 和4 章,我们分别进行如下学习。
第2 章讨论了数字系统,数量如何能使用符号来表示。
第3 章讨论了不同的数据如何存储在计算机中。
第4 章讨论了一些基本的算术运算与位(逻辑)运算。
原文地址: https://mp.weixin.qq.com/s/0LaYhi89ujYQPHuLfwnuiA
4.数据运算 主要讲解存储在计算机中的数据上是如何进行运算,数据的运算可以分为三大类:算术运算、移位运算和逻辑运算。
4.1 逻辑运算 计算机中的数据是以位模式存储的,逻辑运算是指那些应用于模式中的一个二进制位,或在两个模式中相应的两个二进制位的相同基本运算,说人话就是分别针对二进制位进行与、或、非、异或
等操作。
意味着我们可以在位层次上和模式层次上定义逻辑运算,模式层次上的逻辑运算是具有相同类型的位层次上的n个逻辑运算,这里的n就是模式中的位的数目。
(1) 位层次上的逻辑运算 一个位可能是0或1,可以假设“0”代表逻辑“假”,而“1”代表逻辑“真”,我们可以应用布尔代数
中定义的运算去操纵二进制位为纪念乔治•布尔(George Boole)
而命名的布尔代数属于逻辑的特殊数学领域.
与、或、非、异或
逻辑 与
(AND) 运算: 常用运算符&
表示, 只要一假都为假, 即参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
。
逻辑 或
(OR) 运算:常用运算符|
表示, 只要一真都为真, 即只要对应的二个二进位有一个为1时,结果位就为1
。
逻辑 非
(NOT) 运算:常用运算符!
表示, 一假变一真,一真变一假, 即一个二进制位为1在进行非运算后结果为0,反之为0时经过非运算后结果为1
。
逻辑 异或
(XOR) 运算 (发音为“ exclusive-or”):常用运算符^
表示, 真假为真,真真为假,假假也为假, 即当两对应的二进位相异(分别为0、1)时其结果为1
。
XOR 运算符并不是一个新的运算符,其只是 AND 、OR 、NOT 运算符的组合。
例如 x XOR y = [ x AND (NOT y) ] OR [ (NOT x) AND y ]
例如,与、或、非、异或位逻辑运算示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 真:1 & 1 = 1 假:0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0 真:1 | 1 = 1, 0 | 1 = 0, 1 | 0 = 0 假:0 | 0 = 0, 真:!0 = 1 假:!1 = 0 真:1 ^ 0 = 1, 0 ^ 1 = 1 假:0 ^ 0 = 0, 1 ^ 1 = 0
(2) 位模式层次上的逻辑运算 相同的4个运算符(NOT、AND、OR和XOR)可以被应用到n位模式,效果就是对NOT运算来说,把每个运算符应用于每个位,对于其他3个运算符就是把每个运算符应用于相应的位对,有点云里雾里,看了这个例子你就明白了,例如对 10011000 二进制进行 NOT 逻辑运算,将其每个二进制位进行取反则结果为 01100111 。
例如,与、或、非、异或位模式逻辑运算示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 NOT 1 0 0 1 1 0 0 0 | 输入 0 1 1 0 0 1 1 1 | 输出 1 0 0 1 1 1 0 0 | 输入1 AND 0 0 1 0 1 0 1 0 | 输入2 0 0 0 0 1 0 0 0 | 输出 1 0 0 1 1 1 0 0 | 输入1 OR 0 0 1 0 1 0 1 0 | 输入2 1 0 1 1 1 1 1 0 | 输出 1 0 0 1 1 1 0 0 | 输入1 XOR 0 0 1 0 1 0 1 0 | 输入2 1 0 1 1 0 1 1 0 | 输出
四种逻辑运算的应用
求反:NOT运算符的唯一应用就是对整个模式求反。
使指定的位复位:AND运算的一个应用就是把一个位模式的指定位进行复位(置0),通常叫做掩码复位模式.
对指定的位置位:OR运算的一个应用是把一个位模式的指定位进行置位(置1).
使指定的位反转:XOR运算的针对位模式中指定的位进行反转(求反)。
4.2 移位运算 移位运算移动模式中的位,我们可以向左或向右移动位从而改变位的位置,移位运算分成两大类逻辑移位运算
和算术移位运算
。
(1) 逻辑移位运算 逻辑移位运算应用于不带符号位的数的模式,原因是这些移位运算可能会改变数的符号,其又分为逻辑移位
与循环移位
两种方式。
逻辑移位
循环移位 :也称为旋转运算,其对位进行移位但并没有位被丢球或增加。
循环右移:把每一位向右移动一个位置,最右位被回环成为最左位。
循环左移:把每一位向左移动一个位置,最左位被回环成为最右位。
(2) 算术移位运算 该模式是可以表达正整数,也可以使用二进制补码的格式表示带符号的负整数(即负数),使用算术左移则将整数乘以2,使用算术右移动则将整数除以2。
左移按位 <<
运算符:运算数的各二进位全部左移若干位,由 “<<” 右边的数指定移动的位数,高位丢弃低位补0。
右移按位 >>
运算符:把 “ >> “ 左边的运算数的各二进位全部右移若干位,”>>”右边的数指定移动的位数 ,低位丢弃高位补0。
weiyigeek.top-算术左移与右移
温馨提示:算术运算是保留符号位的,算术右移时保留符号位,需要将其复制放入相邻的右边的位中。当算术左移丢弃符号位时,将移位后的最左位作为符号位,如果新符号位与旧符号位相同则运算成功,否则发生数据上溢或下溢出结果非法。
4.3 算术运算 算术运算包括加、减、乘、除,适用于整数和浮点数。
(1) 整数算术运算 所有算术运算(加、减、乘、除)均适用于整数,但是整数的乘法(除法)虽然能使用重复的加法(减法)来实现,但程序是低效的,对于乘法和除法有更高效的程序(如Booth 程序
),但这些超过了本书的范围,基于这个原因,我们这里只讨论整数的加法和减法。
1.二进制补码中的加减法
整数以二进制补码形式存储的,使用二进制补码表示法的优点是加减法之间是没有区别的,当遇到减法时,计算机只是将其简单的转换为+(加法), 将减数变成二进制的补,例如 A - B = A + (B反码 + 1)
二进制补码中的加法就像十进制中的加法一样,每一列对应相加,如果有进位则追加到下一列上。
weiyigeek.top-二进制补码中整数的加减法
大致过程,由上图可知如果运算是减法,我们可以取第二个整数的二进制补码,否则转入下一步,然后再将其相加。
例如,下面的示例中都是以二进制补码格式存储两个整数 A 和 B ,将其分部进行 加法 与 减法操作,非常注意正整数的补码等于反码等于补码,而负整数补码的原码为补码-1
,然后再求反。
如果执行减法,则将减数B进行取反+1, 然后再相加,例如下图中的 4.17 与 4.18.
weiyigeek.top-二进制补码中的加减法示例
温馨提示: 当在计算机中进行数字算术运算时,需要记得每个数字和结果应该分配的二进制位的定义范围之内.
1 2 3 4 5 6 7 # 例如,以二进制补码格式存储两个整数 A 和 B , 显示 B 如何被加到 A 上。 A = (0111 1111)2 => 127 B = (0000 0011)2 => 3 R = (1000 0010)2 => 1000 0010 - 1 = NOT [1000 0001] = 0111 1110 => - 126 # 由上面流程结果可知,由于数据上溢导致结果错误,因为期望的答案 +130 不在范围(-128 ~ +127) 之间 -126 ≠ 127 + 3
2.符号加绝对值整数的加减法
使用该表示整数的加减法看起来非常复杂,有四种不同的符号组合(两符两值),对于减数有四种不同条件,意味着我们要考虑八种不同的情况。
如下流程图解释:
检查运算,如果运算是减法则改变第二个整数(B)的符号。
对符号应用XOR运算,将符号位存放在临时单位S中,如果S=0则符号相同,否则两符号不相同。
如果 S = 0 ,R=± (Am + Bm) , 相加绝对值可以得到 Rm = (Am) + (Bm)
和 Rs = As
,此处m意味着绝对值,下标S意味着符号,但是此种情况可能会发生上溢,在报告后停止。
如果 S = 1 , R=± (Am - Bm) , 取第二个绝对值(Bm)的二进制补码然后进行+1,即 Rm = Am + ( Bm[反码] + 1)
,结果的符号是较大绝对值整数的符号。
如果 Am ≥ Bm,出现上溢结果是一个正数,此时舍弃上溢,Rm即为最终值,使结果的符号取A的符号。
如果 Am < Bm,没有上溢结果是一个负数,取Rm二进制补码(反码+1),使结果的符号取B的符号。
符号加绝对值整数的加减法示例演示:
weiyigeek.top-符号加绝对值整数的加减法
(2) 实数算术运算 浮点数格式存储的实数可以进行上加、减、乘和除算术运算。
实数加减法
以浮点数存储的实数的加法和减法被简化为小数点对齐后,以符号加绝对值(符号和尾数的组合
)存储的两整数的加法和减法。
计算流程:
如果两数A或B中任意一个为0,则结果则为不为0的数。
如果运算是减法,改变减数(B)的符号来模拟加法。
通过在尾数中包含隐含的1和增加指数,两数分别去规范化,此时尾部看做一个整数。
统一指数,我们需要增加较小的指数,移位相应的尾数,直到两个数具有相同的指数.
例如,把两个指数变成4 1.11101 x 2^4 + 1.01 x 2^2 => 1.11101 x 2^4 + 0.0101 x 2^24
把每个数的符号与尾数组合看做一个符号加绝对值格式的整数。
最后再次规范化数变成 1.000111 x 2^5
我们可以通过如下两个示例进行学习实践实数算术运算:
例如 + 5.75 的 S 、E、M值计算过程
由于是 + ,则 S = 0
二进制值为 101.11 => 1.0111 * 10 ^2
指数为 2 :2 + 127 = 129 => 1000 0001 = E
尾数:M = 0111 0000 …. 0000 (后补齐19个0)