CMU 15-213 Introduction to Computer Systems学习笔记(2) Bits,Bytes,Integer

it2022-05-05  189

将信息表示为bits

Everything is bits

每个bit是0或1

为什么选用bit?这是因为电子的实现

容易存储可以比特的元素抗干扰能力强(比如电路中存在噪声或者其他干扰)

因此数字信号比模拟信号更好。

用二进制计数的举例

解析Byte

布尔代数

用布尔代数实现位运算

用bit表示集合

注意&&与&、|与||的区别,&&与||是判断条件的真假,(Bryant提到即使是有经验的C语言程序员也经常犯错!)

bit操作

位移操作

逻辑左移:将所有的bit位向左移位,右边填充0

逻辑右移:将所有的bit位向右移位,左边填充0

算术右移:将所有的bit位向右移位,左边填充1

Integers

解析Integer

首先数字分为无符号数(unsigned)和补码(Two's Complement)两种类型,我记得大三学习微机的时候国内教材说的是原码补码反码。

数字范围

Conversion,Casting

原码与补码之间的映射:

我们可以发现其实无符号数和有符号数是存在一定映射关系的。

Casting Surprises

当两个数字作比较的时候,如果两个数都是补码,那么就补码进行比较,但是一旦有一个是原码,那么另一个都会由上面的映射关系转换成原码。用(int)放在原码前面是将原码强制转换成补码比较。

这里老师还讲了一个性质 -x=~x+1 

Expanding, truncating

符号扩展Sign Extension

给定:w位整数x 要求将其扩展到w+k位同样大小的整数

规则:复制k个符号bit,将其放置于原X符号位前

举例

Truncation

给定:k+w位原码或者补码的整数X 要求转换成k位同样大小的X

规则:扔掉头部k位bit(这里我有点困惑,因为按照下面的例子,做的是mod)

其中分为有符号位变化和无符号位变化,第一种无符号位变化,value是不会变的,但是第二种有符号位变化,value我们可以看到发生了改变。

Addition, negation, multiplication, shifting

无符号数相加溢出(overflow)后,结果为:对数取此时对应位数值的模。比如 11101001 +11010101 = 1 10111110(446)溢出 此时只剩10111110(190)  190=446%6

下面是slides上面一个补码的相加(补码一般就是用来表示有符号数)溢出的情况。

 

老师给的例子是 1101(-3)+1010(-6) 此时相加结果为 1(drop) 0111(7)为负数加负数得到了正溢出,此种情况之后讨论。

Multiplication

无符号数相乘

无符号数相乘,当结果为2w个bit时候,我们会舍弃掉高位的w位bit,只留下w位。

标准乘法运算

忽略高位w个bit

实现模运算功能Implements Modular Arithmetic

有符号数相乘

标准乘法运算

忽略高位w个bit跟无符号数比较,有一些和有符号数是不同的低位的bit是一样的

移位乘2法

将所有的bit position左移相当于把数字乘2

移位除2法

对于无符号数:将所有的bit position右移相当于把数字除以2,结果向下取整。

对于有符号数:上面的做法再数字小于0的时候,会round向偏向负无穷的方向。

向右移位也是因此需要算术右移的情况。

 

在JAVA中,设计者将所有的情况都用补码来表示,他们觉得unsigned number会造成太多trikcy的情况!太wierd!

所以为什么我们会用Unsigned Number?

使用modular arithmetic运算使用bits表示集合在系统编程里使用 (bit masks,device commands)

一些关于机器的单词

word size这个词实际上并没有太多的意义。32位的机器可以用来存储的地址规模是4GB,而64位机器一般用47位bit来存储地址。

 

Byte Ordering 

主要是 Little Endian 和 Big Endian 

这个概念在之前我学计网的时候也碰到了,一般在系统中用的都是Little Endian,转到网络中传输的时候需要把Little Endian转到Big Endian,到另一个终端的时候,再转为Little Endian。

 

后记:上这节课的时候感觉还是有一些地方听不太懂,很多概念方法在这里总结的可能也有很多问题。但是这毕竟是我自己一个学习笔记,肯定会有很多疏漏,(连大佬都经常会犯错呢)。写完整的学习笔记的话,之后我在找实习以及工作的时候应该也能拿出来翻一翻吹吹小牛逼,如果面试官也恰好上过这门课那还可以交流上课经验,哈哈哈,我真是个小机灵鬼。

 

 

 

 


最新回复(0)