《程序是怎样跑起来的》学习笔记(第二章)——数据是用二进制数表示的

一、课前热身

1.  32 位是几个字节 ?
2.  二进制数 01011100 转换成十进制数是多少?
3.  二进制数 00001111 左移两位后,会变成原数的几倍?
4.  补码形式表示的 8 位二进制数 11111111,用十进制数表示
的话是多少?
5.  补码形式表示的 8 位二进制数 10101010,用 16 位的二进
制数表示的话是多少?
6.  反转部分图形模式时,使用的是什么逻辑运算?

二、用二进制数表示计算机信息的原因

  • 计算机的内部是由很多IC设备构成的,这些IC设备自身又有很多引脚,通过这些引脚,实现了信息的交互。IC 的所有引脚,只有直流电压0V 或 5V两个状态。也就是说,IC 的一个引脚,只能表示两个状态。
  • IC 的这个特性,决定了计算机的信息数据只能用二进制数来处理。由于 1 位(一个引脚)只能表示两个状态,所以二进制的计数方式就变成了 0、1、10、11、100…这种形式。二进制并不是特意为IC设计的,只是因为二进制的模式与引脚的模式非常吻合,因此就采用二进制。
    在这里插入图片描述

三、什么是二进制数

  • 大家在日常生活中,大部分情况下接触到的都是十进制数。二进制的数和十进制的规则很类似。十进制是满十进一,二进制是满二进一。
  • 想要更深入的理解,就得知道什么是位权。首先,让我们从位权的含义说起。例如,十进制数 39 的各个数位的数值,并不只是简单的 3 和 9,这点大家应该都知道。3 表示的是3×10 = 30,9 表示的是 9×1 = 9。这里和各个数位的数值相乘的 10 和1,就是位权。数字的位数不同,位权也不同。
  • 位权的思考方式也同样适用于二进制数。即第 1 位是 2 的 0 次幂
    (= 1),第 2 位是 2 的 1 次幂(= 2),第 3 位是 2 的 2 次幂(=4),……,第 8 位是 2 的 7 次幂(= 128)。“○○的 ×× 次幂”表示位权,其中,十进制数的情况下○○部分为 10,二进制数的情况下则为 2。这个称为 基数 B。十进制数是以 10 为基数的计数方法,二进制数则是以 2 为基数的计数方法。
  • 接下来,让我们来解释一下各数位的数值和位权相乘后“相加”这个处理的原因。其实大家所说的数值,表示的就是构成数值的各数位的数值和位权相乘后再相加的结果。例如 39 这个十进制数,表示的就是 30+9,即各数位的数值和位权相乘后再相加的数值。这种思考方式在二进制数中也是通用的。二进制数 00100111 用十进制数表示的话是 39,因为(0×128)+(0×64)+(1×32)+(0×16)+(0×8)+(1×4)+(1×2)+(1×1)= 39。

三、移位运算和乘除运算的关系

3.1、移位运算

移位运算:指的是将二进制数值的各数位进行左右移位(shift = 移位)的运算。移位有左移(向高位方向)和右移(向低位方向)两种。在一次运算中,可以进行多个数位的移位操作。

  • 移位操作适用与任何进制的数值,在计算机内部,无论用户输入的是那种进制的数值,在内部最后都转化为二进制。因此都可以进行移位操作;

3.1.2、左移

  • “左移后空出来的低位,要补上什么样的数值呢?”空出来的低位要进行补0 操作。不过,这一规则只适用于左移运算。此外,移位操作使最高位或最低位溢出的数字,直接丢弃就可以了。
    在这里插入图片描述

3.1.2、右移

  • 与左移不同的是,右移分为逻辑右移和算术右移
  • 右移有移位后在最高位补 0 和补 1 两种情况。当二进制数的值表示图
    形模式而非数值时,移位后需要在最高位补 0。这就称为 逻辑右移
  • 算术右移:又分为两种情况,正数和负数。算术右移时,最高位位符号位,如果是正数,则右移之后空出来的位补0,负数补1;

3.2、移位运算

  • 移位运算也可以通过数位移动来代替乘法运算和除法运算。例如,将 00100111 左移两位的结果是 10011100,左移两位后数值变成了原来的 4 倍。用十进制数表示的话,数值从 39(00100111)变成了156(10011100),也正好是 4 倍(39×4 = 156)。其实,反复思考几遍后就会发现确实如此。十进制数左移后会变成原来的 10 倍、100 倍、1000 倍……同样,二进制数左移后就会变成原来的 2 倍、4 倍、8 倍……反之,二进制数右移后则会变成原来的1/2、1/4、1/8……这样一来,大家应该能够理解为什么移位运算能代替乘法运算和除法运算了吧;
    在这里插入图片描述

四、补数

  • 补数的出现解决了负数的表达方式,是为了让计算机正确的进行有负数参与的运算。

  • 二进制数中表示负数值时,一般会把最高位作为符号来使用,因此我们把这个最高位称为符号位。符号位是 0 时表示正数 ,符号位是1 时表示负数。那么-1 用 8 位二进制数来表示的话是什么样的呢?可能很多人会认为“1 的二进制数是 00000001,因此-1 就是 10000001”。但这个答案是错的,正确答案是 11111111。计算机在做减法运算时,实际上内部是在做加法运算。用加法运算来实现减法运算,是不是很新奇呢?为此,在表示负数时就需要使用“二进制的补数”。 补数就是用正数来表示负数,

  • 补数的计算方式:(1)先将负数取绝对值运算;(2)将进行绝对值运算后的数转化成二进制。此过程称为原码计算。(3)将原码取反。(4)反码加1。就得到补码;
    在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值