程序是怎么跑起来的笔记 -- 数据使用二进制表示的

CPU 和内存都是 IC(集成电路) 的一种。IC 的所有引脚, 只有直流电压0V 或 5V两个状态。 也就是说, IC 的一个引脚, 只能表示两个状态。IC 的这个特性, 决定了计算机的信息数据只能用二进制数来处理。 IC 的一个引脚表示二进制数的 1 位。

位是最小单位,字节是基本单位。 内存和磁盘都使用字节单位来存储和读写数据, 使用位单位则无法读写数据。 因此, 字节是信息的基本单位。

左移后 空出来的低位要进行补0 操作。 不过, 这一规则只适用于左移运算。移位操作时最高位或最低位溢出的数字, 直接丢弃就可以了。

移位运算也可以通过数位移动来代替乘法运算和除法运算。十进制数左移后会变成原来的 10 倍、 100 倍、 1000 倍……同样, 二进制数左移后就会变成原来的 2 倍、 4 倍、 8 倍…… 反之, 二进制数右移后则会变成原来的1/2、 1/4、 1/8

二进制数中表示负数值时, 一般会把最高位作为符号来使用, 因此我们把这个最高位称为符号位。符号位是 0 时表示正数 , 符号位是1 时表示负数。

计算机在做减法运算时, 实际上内部是在做加法运算。 用加法运算来实现减法运算。 为此, 在表示负数时就需要使用“二进制的补数”。  补数就是用正数来表示负数。

二进制的补数是将二进制数的各数位的数值全部取反,然后再将结果加 1。 例如, 用 8 位二进制数表示- 1 时, 只需求得 1,也就是 00000001 的补数即可。

由于“将二进制数的值取反后加 1 的结果, 和原来的值相加, 结果为 0” , 则有 1 + 1的补数 = 0  ,可以推出  -1 = 1的补数。

11111110 表示的负数如何计算呢? 这时可以利用负负得正这个性质。 假若 11111110 是负△△, 那么 11111110 的补数就是正△△。 通过求解补数的补数, 就可知该值的绝对值。 11111110 的补数, 取反加 1 后为00000010。 这个是 2 的十进制数。 因此, 11111110 表示的就是- 2。

用补数表示的-5为11111011,将其左移2位,得到11101100,11101100的补数为00010100,00010100对应的十进制数为20,则-5左移2位等于-20, 即将-5乘以4.

用补数表示的-5为11111011,将其左移5位,得到01100000,01100000的补数为10100000,10100000对应的十进制数为160,则-5左移5位等于-160,即将-5乘以32. 

将二进制数表示的信息作为四则运算的数值来处理就是 算术运算。 而像图形模式那样, 将二进制数处理为单纯的 0和 1 的罗列就是 逻辑运算。逻辑运算是指对二进制数各数字位的 0 和 1分别进行处理的运算, 包括逻辑非( NOT 运算)、 逻辑与( AND 运算)、 逻辑或( OR 运算) 和逻辑异或( XOR 运算) 四种。逻辑运算时,不能把二进制数表示的值当作是数值, 而应该把它看作是图形或者开关上的 ON/OFF( 1 是 ON, 0 是 OFF)。 逻辑运算的运算对象不是数值, 因此不会出现进位的情况。

当二进制数的值表示图形模式而非数值时, 移位后需要在最高位补 0。 类似于霓虹灯往右滚动的效果。 这就称为 逻辑右移。
将二进制数作为带符号的数值进行运算时, 移位后要在最高位填充移位前符号位的值( 0 或 1)。 这就称为算术右移。 如果数值是用补数表示的负数, 那么右移后在空出来的最高位补 1, 就可以正确地
实现 1/2、 1/4、 1/8 等的数值运算。 如果是正数, 只需在最高位补 0即可。

只有在右移时才必须区分逻辑位移和算术位移。 左移时, 无论是图形模式( 逻辑左移) 还是相乘运算( 算术左移), 都只需在空出来的低位补 0 即可。

以 8 位二进制数为例, 符号扩充就是指在保持值不变的前提下将其转换成 16 位和 32 位的二进制数。不管是正数还是用补数表示的负数, 都只需用符号位的值( 0 或者 1) 填充高位即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值