注:本系列内容为阅读《程序是怎样跑起来的》书籍后的记录笔记,部分内容参考于书中,转载请注明出处。
第二章 数据
2.1 二进制数据
计算机内部是由若干IC(集成电路)部件构成的。IC部件有很多引脚,每个引脚只有直流电压0V和5V两个状态(大部分IC的电源电压都是+5V,少量也回使用+5V以下的电压,若使用+5V以下,则还存在不接受电流信号的高阻抗状态)。
用位来表示每个引脚的状态,英文为bit
,一个二进制数字表示一位。0V对应二进制数0,+5V对应1。
位 是计算机处理信息的最小单位。
8位二进制数称为一个字节。
字节是计算机处理信息的基本单位。
用字节单位处理数据时,如果数字小于存储数据的字节数(也即二进制数字的位数),那么高位上就用0补填。
奔腾等32位处理器,就是具有32个引脚以用于信息的输入和输出。也就是说,奔腾一次可以处理32位(4个字节)的二进制信息。
2.2 二进制、十进制
基数和位权相乘后再相加
0 * 2的3次幂 - 0 为基数, 2的3次幂是位权。
数字的位数不同,位权也不同;进制不同,位权也不同。
2.3 移位运算和乘除运算
移位运算是二进制数特有的运算,也是计算机特有的运算。
移位(shift)有左移(<<向高位方向移动)和右移(>>向地位方向移动)。
移位运算符的左侧是被移位的值,右侧表示要移位的位数,如b = 39 << 2
2.4 补数
二进制中表示负数时,一般会把最高位作为负数来使用,因此我们把最高位称为符号位。符号位为0时表示正数,为1时表示负数。
计算机做减法运算时,实际上是内部做加法运算。补数就是用正数来表示负数。
补数求解的变换方法是取反加1
。
将二进制数的值取反后加1的结果,和原来的值相加,结果为0
2.5 逻辑右移和算数右移
当二进制数的值表示图形模式而非数值时,移位后需要在最高位补0。这称为逻辑右移。
将二进制数作为带符号的数值进行运算时,移位后要在最高位填充移位前符号位的值(1或0)。这就称为算数右移。
只有在右移时才区分逻辑位移和算数位移,左移时无论是图形模式(逻辑左移)还是相乘运算(算数左移),都只需要在空出来的低位补0即可。
符号扩充:以8位二进制数为例,符号扩充就是在保持其值不变的情况下,将其转换成16位或者32位二进制数。
方法:不论正数还是用补数表示的负数,都只需要用符号位的值(0或者1)填充高位即可。
2.6 掌握逻辑运算的敲门
计算机能处理的运算,大体可分为算数运算和逻辑运算。
算数运算是指加减乘除四则运算。
逻辑运算是指对二进制数的各数字位的0或1分别进行处理的运算,包括逻辑非(NOT)、逻辑与(AND)、逻辑或(OR)和逻辑异或运算(XOR)。