Java教程

[计算机基础系列文章(四)]关于二进制

本文主要是介绍[计算机基础系列文章(四)]关于二进制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

什么是二进制

1679年3月15日戈特弗里德·威廉·莱布尼茨发明了一种计算法,用两位数代替原来的十位数,进位规则是“逢二进一”,借位规则是"借一当二"。

计算机程序为什么使用二进制来表示各种数据

这个要从硬件说起,计算机硬件实际上是由IC(集成电路)这种电子部件构成。
包括CPU和内存都是IC的一种。
IC包含多个引脚,所有引脚只有直流电压0V和5V两个状态,就是说IC一个引脚只能表示两个状态,而这个特性决定了计算机信息数据只能用二进制数来处理。

信息的单位

最小单位:
计算机处理信息的最小单位-位(英文单词缩写bit),相当于二进制中的一位。

基本单位
计算机处理信息的基本单位是8位二进制数(8 bit),称为字节(英文单词缩写byte)。
字节是最基本的信息计量单位,内存和磁盘都是使用字节来存储和读写数据。
例如:32位处理器一次可以处理32位(4字节)的二进制数据,64位处理器一次可以64位(8字节)的二进制数据。

二进制的运算

计算机的运算分为算术运算和逻辑运算

二进制的算术运算

加法

加法有四种情况: 0+0=0,0+1=1,1+0=1,1+1=10(0 进位为1)
需要注意的点:计算机在做加法时,由于两个二进制数相加的结果可能超过了原有的位数,针对超过的位数计算机会截断丢弃掉,保留剩下的,即溢出,导致可能得不到正确的结果,比如两个正数相加结果为负数。

减法

计算机在做减法的时候,实际上是做的加法,加负数来实现。
例如 1-1时,实际上是执行的 1 + (-1) 来完成。

在介绍减法之前,先解释下二进制是符合来表示负数的。

负数

二进制标识负数时,一般会把最高位作为符号来使用,0表示整数,1表示负数。
那么如何表示 -1 ? 这里涉及另外一个知识,补码。

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。

在介绍补码概念之前,先介绍一下“模”的概念。

表示n位的计算机计量范围是0~2的N次方 - 1,模=2的N次方。

“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。
例如:以时钟为例,时钟的模为12,在12为模的系统里,加10和减2效果是一样的,因此凡是减2运算,都可以用加10来代替。所以对“模”而言,2和10互为补数。实际上只要两者相加等于模互为补数,例如11和1,9和3等。

补码

把补数用到计算机对数的处理上,就是补码。

原码求补码,分为以下两种情况:

  1. 正数
    正整数的补码是其二进制表示,与原码相同
  2. 负数
    负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。

运算

任何有模的计量器,均可化减法为加法运算,就是取反后加1。
以计算 1 - 1 举例:
计算机在运算 1 - 1的时候,实际上是执行的 1 + (-1) 。

  1. 计算-1的二进制,实际上就是计算1的补数
    在这里插入图片描述
  2. 计算 1 + (-1),结果为0
    在这里插入图片描述

乘法

乘法可以用加法和位运算左移来实现,这里简单说下左移。

规则:

  1. 左移后空出来的低位用0补充
  2. 左移后使最高位溢出的数字,直接丢弃

举例说明:

# 将变量a的值左移两位
a = 39
b = a << 2;
# 移位前十进制数39用2进制表示是 00100111,左移两位后是10011100,转化成十进制数就是156

图解
在这里插入图片描述

相当于乘4

除法

位运算

左移

左移后,在空出来的最高位补0。

右移

进行算术右移时,如果数值是用补数表示的负数值,那么右移后空出来的最高位补1,如果是正数,在最高位补0。
在这里插入图片描述

二进制的逻辑运算

逻辑运算是指对二进制数各数字位的0和1分别进行处理的运算,包括非、与、或、异或四种。

逻辑运算时,不要把二进制数当成数值,应该把它们看做是开关(1是ON ,0是OFF)。

非(not)

指0变成1,1变成0的取反操作的运算。
在这里插入图片描述

与(and)

两个都是1时,结果为,其他情况结果都为0的运算。
在这里插入图片描述

或(or)

至少有一方是1时,运算结果为1,其他情况结果都为0的运算。
在这里插入图片描述

异或(xor)

排斥相同数值的运算。
当其中一方是1,另一方是0时,运算结果为1,其他情况结果都为0的运算。
在这里插入图片描述

位运算

左移

左移后,在空出来的最高位补0。

右移

当进行逻辑右移时,移位后需要在最高位补0。
在这里插入图片描述

二进制的符号扩充

以8位二进制数举例,符号扩充就是指在保持值不变的前提下将其转化为16位或32位的二进制数。
规则:不管是正数还是负数,都只需要用符号位的值(0或1)填充高位即可。
在这里插入图片描述

二进制与十进制的换算

分两步:

  1. 将二进制的各数位的值和位权相乘
  2. 将相乘的结果相加的结果就是十进制数

图解:
在这里插入图片描述

位权:
上图中 2的N次方就是位权,如果是十进制就是10的N次方,十六进制就是16的N次方

注意:该算法同样适用于其他进制

系列文章

上一篇:[计算机基础系列文章(三)]程序跑起来的核心-CPU

这篇关于[计算机基础系列文章(四)]关于二进制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!