计算机基础(二)二进制

计算机是通过什么来传送数据信号的呢?
计算机采用电平信号来传送数据,并且只有两种信号:高电平和低电平(高电平用1表示,低电平用0表示)。


a. 电平是个电压范围,规定输出高电平>2.4V,输出低电平<0.4V。电压属于简单的一个模拟量,表示的是两点电位之间的电势差,而电平则是逻辑量,有逻辑高、逻辑低等不同的值,电平其实就是电压的不同电位。
b. 因为只有两种信号,精确度就会比较高,不容易因为硬件的故障损耗,产生误差。能保证我发出去的信号,别人接收的时候是准确的。不会因为电路硬件问题导致输出的信号变弱,使得接收者接收了错误的信号。

CPU 和 内存使用IC电子元件作为基本单元,IC电子元件有不同种形状,但是其内部的组成单元称为一个个的引脚(引脚,又叫管脚,英文叫Pin。就是从集成电路(芯片)内部电路引出与外围电路的接线,所有的引脚就构成了这块芯片的接口)。IC的所有引脚,只有高电平和低电平两种信号,IC的这种特性,也就决定了计算机的信息处理只能用 0 和 1 表示,也就是二进制来处理。

综上所述,计算机传输数据信号,逻辑层上是通过传输二进制的0和1数字串,物理层上是连续的高低电平信号。

位和字节

数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。

二进制数的位数一般为 8位、16位、32位、64位,也就是 8 的倍数,为什么要跟 8 扯上关系呢? 因为在计算机中,把 8 位二进制数称为一个字节(Byte), 一个字节有 8 位,也就是由 8个bit构成。为什么1个字节等于8位呢?因为 8 位能够涵盖所有的字符编码,这个记住就可以了。

用字节处理数据时,如果数字小于存储数据的字节数 ( 二进制的位数),那么高位就用 0 填补,高位和数学的数字表示是一样的:左侧表示高位,右侧表示低位。比如,这个六位数用二进制数来表示就是 100111,只有6位,高位需要用 0 填充,填充完后是 00100111,占一个字节,如果用 16 位表示 就是 0000 0000 0010 0111占用两个字节。

我们一般口述的 32 位和 64位的计算机,一般就指的是CPU一次能够处理的二进制数据位的最大位数值(也称字长),32 位一次可以表示 4个字节,64位一次可以表示8个字节的二进制数。处理器的字长越大,说明它的运算能力越强。比如我们的笔记本电脑,现在一般都是64位的电脑,这也就是说我们的电脑一次可以处理8个字节。

如果讲处理器的寻址范围(以8位二进制作为一个存储单元,也就是一个字节,通常每个单元存储一个字。每个存储单元有一个地址,是一个整数编码,可以表示为二进制整数),则要看处理器的地址总线的位数,而不是它的字长!目前主流的64位处理器的数据总线为64位,地址总线大部分是32位,这也就是为什么有些人称现在的64位笔记本是伪64位电脑一说的来源。地址总线与寻址范围的关系:存储单元是以字节(byte)为单位,N根地址总线能访问2的N次方地址。

我们一般在软件开发中用十进制数表示的逻辑运算等,也会被计算机转换为二进制数处理。对于二进制数,计算机不会区分他是 图片、音频文件还是数字,这些都是一些数据的结合体。

二进制

二进制数代表的 00100111 转换成十进制就是 39,这个 39 并不是 3 和 9 两个数字连着写,而是 3 * 10 + 9 * 1,这里面的 10 , 1 就是位权,以此类推,上述例子中的位权从高位到低位依次就是 7 6 5 4 3 2 1 0。这个位权也叫做次幂,那么最高位就是2的7次幂,2的6次幂 等等。二进制数的运算每次都会以2为底,这个2 指得就是基数,那么十进制数的基数也就是 10 。在任何情况下位权的值都是 数的位数 - 1,那么第一位的位权就是 1 - 1 = 0, 第二位的位权就睡 2 - 1 = 1,以此类推。那么我们所说的二进制数其实就是 用0和1两个数字来表示的数,它的基数为2,它的数值就是每个数的位数 * 位权再求和得到的结果。

 十进制转化成二进制采用"除2取余,逆序排列"法:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

十进制小数转换成二进制小数,和上面说的整数转换有所不同,用“乘基取整法”。下面示例:

和十进制数一样,加减乘除也适用于二进制数,只要注意逢 2 进位即可。二进制数的运算,也是计算机程序所特有的运算,因此了解二进制的运算是必须要掌握的。

① 移位运算
以 39 为例,我们先把十进制的39 转换为二进制的 0010 0111,然后向左移位一个字节,也就变成了 0100 1110,那么再把此二进制数转换为十进制数就是上面的78, 十进制的78 竟然是 十进制39 的2倍关系。我们在让 0010 0111 左移两位,也就是 1001 1100,得出来的值是 156,相当于扩大了四倍!显然,左移相当于是数值扩大的操作。那么右移是缩小 1/2,1/4 倍?

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

计算机世界中是没有减法的,计算机在做减法的时候其实就是在做加法,也就是用加法来实现的减法运算。比如 100 - 50 ,其实计算机来看的时候应该是 100 + (-50),为此,在表示负数的时候就要用到二进制补数,补数就是用正数来表示的负数。为了获得补数,我们需要将二进制的各数位的数值全部取反,然后再将结果 + 1 即可。
-1 用二进制数表示:原始数值是1(00000001),取反(11111110),加1(11111111),也即十进制的-1对应二进制为:11111111。下面通过1-1验证下其正确性。

 0 虽然既不是正数也不是负数,但是考虑到其符号位,就将其归为了正数。

在了解完补数后,我们重新考虑一下右移这个议题,右移在移位后空出来的最高位有两种情况 0 和 1。当二进制数的值表示图形模式而非数值时,移位后需要在最高位补0,类似于霓虹灯向右平移的效果,这就被称为逻辑右移。将二进制数作为带符号的数值进行右移运算时,移位后需要在最高位填充移位前符号位的值( 0 或 1)。这就被称为算数右移。如果数值使用补数表示的负数值,那么右移后在空出来的最高位补 1,就可以正确的表示 1/2,1/4,1/8等的数值运算。如果是正数,那么直接在空出来的位置补 0 即可。

当然,结果不为 0 的运算同样也可以通过补数求得正确的结果。不过,有一点需要注意,当运算结果为负的时候,计算结果的值也是以补数的形式出现的,比如 3 - 5 这个运算,来看一下解析过程:

 综上我们可以得出来一个结论:左移时,无论是图形还是数值,移位后只需要将低位补 0 即可;右移时,需要根据情况判断是逻辑右移还是算数右移。

②逻辑运算
计算机能够处理的运算,大体可分为逻辑运算和算数运算,算数运算指的是加减乘除四则运算;逻辑运算指的是对二进制各个数位的 0 和 1分别进行处理的运算,包括“逻辑非(NOT运算)、逻辑与(AND运算)、逻辑或(OR运算)和逻辑异或(XOR运算)”四种。

针对二进制部分主要转自下面文章:

https://blog.csdn.net/weixin_43314519/article/details/107443049

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值