计算机基础知识之二进制

在C/Java/JavaScript等高级语言编写的程序中,「数值」、「字符串」和「图像」在计算机内部都是以「二进制数值」的形式来表现的

计算机内部是由IC这种电子部件构成的。IC的所有「引脚」,只有「直流电压」0V或5V两个状态。

也就是说,IC的一个引脚,「只能表示两个状态」

IC的这个特性,决定了计算机的信息数据只能用二进制数来处理。由于1位(一个引脚)只能表示两个状态,所以二进制的计数方式就变成了0、1、10、11、100...这种形式。

计算机处理信息的「最小单位」--「位」,就相当于二进制中的一位。

IC的一个引脚表示二进制的1位

二进制的位数一般是8位、16位、32位····「也就是8的倍数」,这是因为计算机所处理的信息的「基本单位」是8位二进制数。8位二进制数被称为一个「字节」。

字节是最基本的**「信息计量单位」**

内存和磁盘都使用「字节单位」来存储和读写数据,使用「位单位」则无法读写数据。

用字节单位处理数据时,如果数字小于存储数据的字节数(=二进制数的位数),那么高位上就「用0填补」。例如,100111这个6位二进制数,用8位(=1字节)表示时为00100111。

在程序中,即使是用「十进制」和「文字」等记录信息,在「编译」后也会转换成二进制的值。

对于用二进制数表示的信息,计算机不会区分它是数值、文字,还是某种图片的模式,而是「根据编写程序的各位对计算机发出的指示进行信息的处理」。

例如,00100111这样的二进制数,即可以将其当做「数值」做加法运算,也可以当成‘(单引号)文字而显示在显示器上。

具体进行何种处理,取决于**「程序的编写方式」**

二进制数的值换成十进制数的值,只需将二进制的各「数位」的值和「位权」相乘,然后将相乘的结果相加即可。

十进制数39的各个「数位」的数值,并不只是简单的3和9。

这里的各个「数位」的数值相乘的10和1就是「位权」。数字的位数不同,位权也不一样。

「位权」的思考方式同样适用于二进制

「〇〇的xx次幂」表示位权,

数值,表示的就是构成数值的各「数位」的数值和「位权」相乘后相加的结果

二进制数00100111用十进制数表示的话是39,因为(0×128)+(0×64)+(1×32)+(0×16)+(0×8)+(1×4)+(1×2)+(1×1)=39

和十进制数一样,「四则运算」同样也可以使用在二进制数中,只要注意「逢二进位」即可。

「移位运算」指的是将二进制数值的各数位进行「左右移位」的运算。

移位有「左移」(向高位方向)和「右移」(向低位方向)两种。

假设存在如下处理。把变量a中保存的十进制数值39左移两位后再将运算结果存储到变量b中。

a=39;b=a<<2;<<这个运算符表示「左移」,「右移」时用>>运算符。<<运算符和>>运算符的「左侧」是「被移位的值」,「右侧」表示要移位的「位数」。

在前面我们介绍过,无论程序中使用的是几进制,计算机内部都会将其准换成二进制数来处理,因此都能进行「移位操作」。

针对「左移运算」,空出来的低位要进行「补0操作」。

而右移操作,由于情况特殊,我们后面再做详细介绍。

此外,移位操作使最高位或最低位「溢出」的数字,直接丢弃就可以了。

下图,就是上述代码的运行过程。

「移位运算」就好比使用二进制表示的「图片模式」像霓虹灯一样「左右流动」的样子

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

计算机在做减法运算时,实际上内部是在「加法运算」。在表示负数时就需要使用「二进制的补数」。

补数就是**「用正数来表示负数」**

为了能获取补数,需要**「将二进制数的各位的数值全部取反,然后再将结果加1」**

例如,用8位二进制数表示-1时,只需要求得1,也就是00000001的补数即可。

图例如下:

1-1,也就是1+(-1),一眼就能知道答案,结果是0。

通过上文我们得知,-1用二进制表示为11111111。那么,在计算机内部计算1-1,就变成了。

00000001+11111111结果确实为0(=00000000)。这个运算过程中出现了「最高位溢出」的情况,「对于溢出的位,计算机会直接忽略掉」。

即在8位的范围内进行计算时候,100000000这个9位二进制数就会被认为是00000000这一8位二进制数。

补数求解的变换方法就是**「取反加1」**

将二进制数的值取反加1的结果,和原来的值相加,结果为0

右移有移位后在最高位补0和补1两种情况。当二进制数的值表示「图形模式」而非数值时候,移位后需要在最高位补0。这就称为「逻辑右移」。

将二进制数作为「带符号的数值」进行运算时,移位后要在最高位填充「移位前」符号位的值(0或1)。这就称为「算术右移」。

只有在「右移」时才必须区分「逻辑位移」和**「算术位移」**

左移时,无论是「图形模式」(逻辑左移)还是「相乘运算」(算术左移),都只需要在空出来的「低位补0」即可。

以8位二进制数为例,「符号扩充」就是指在保存值不变的前提下将其准换成16位和32位的二进制。

不管是正数还是用补数表示的负数,都只需要「用符号位的值(0或1)填充高位」即可。

在运算中,与逻辑相对的术语是算术。

计算机能处理的运算,大体可分为「算术运算」和「逻辑运算」。

「逻辑非」是指的是0变成1、1变成0的取反操作。

「逻辑与」指的是”两个都是1“时,运算结果为1,其他情况下运算结果都为0的运算。

逻辑与的真值表

「逻辑或」指的是”至少有一方是1“时,运算结果为1,其他情况下运算结果都是0的运算

逻辑或的真值表

「逻辑异或」指的是排斥相同数值的运算。“两个数值不同”,也就是说,当“其中一方是1,另一方是0“时运算结果是1,其他情况下结果都是0.

逻辑异或的真值表

在进行逻辑运算时,都是对相对应的「各数位」分别进行运算

「大家不要把二进制数表示的值当作数值,而应该把它看作是图形或者开关上的ON/OFF」。并且,「逻辑运算」的运算对象不是数值,因此不会出现进位的情况。

下图表示的是对NI的两个字母的图形模式进行各种「逻辑运算」后的结果。假设白色部分表示1,黑色部分表示0.

THE END
1.什么是算术运算?什么是关系运算?什么是逻辑运算?题目 什么是算术运算?什么是关系运算?什么是逻辑运算? 相关知识点: 试题来源: 解析1.算术运算:用于各类数值运算.包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种.2.关系运算:用于比较运算.包括大于(>)、小于(=)、小于等于(>=,https://easylearn.baidu.com/edu-page/tiangong/questiondetail?id=1726076010199297025&fr=search
2.C语言运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C语言提供了如下类型的运算符:算符运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符6.1 算术运算符假设A为10,B为20。运算符描述实例 + 把两个操作数相加 A + B将得到30 - 从第一个操作数中减去第二个操作数 A - B将得到-10 * 把https://www.jianshu.com/p/c604515b6bb2
3.计算机底层知识之二进制像图形模式,将数值处理为单纯的0和1的罗列就是逻辑 计算机能处理的运算,大体可分为算术运算和逻辑运算。 算术运算是指加减乘除四则运算 逻辑运算是指对二进制数各数字位的0和1分别进行处理的运算 逻辑非(NOT运算) 逻辑与(AND运算) 逻辑或(OR运行) https://developer.aliyun.com/article/1195911
4.c语言例题第五章 5.1 什么是算术运算?什么是关系运算?什么是逻辑运算? 解:略。 5.2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”? 解:设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。例https://www.360doc.cn/article.aspx?id=20848770
5.计算机的逻辑运算和算术的逻辑运算的主要区别是什么呢?爱问知识人逻辑运算中,1+1=1;在算术运算中1+1=10。所以在逻辑运算中,跟”或“运算有关的,跟算术运算都https://iask.sina.com.cn/b/1SWRjJftuNOb.html
6.python关系运算符python关系运算符号包括哪些一、运算符是什么? 运算符是用于数学计算,比较大小和逻辑运算的符号。python中主要有以下几类运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 二、算数运算符 算数运算符主要用于数学运算,部分运算符也可以用于其他数据类型的运算。 https://blog.51cto.com/u_16213725/8561021
7.C语言课堂教学案例6篇(全文)C语言运算符可以分为:算术运算符、逻辑运算符、关系运算符、位运算符、赋值运算符。2.6.1 算术运算符和算术表达式 1.算术运算符:加、减、乘、除及取模即:+,-,*,/,%来表示。C语言规定: (1)模运算符%,仅用于整型变量或整型常量。 (2)优先级:一个表达式中如有多个运算符,则计算先后次序为相应运算符的优https://www.99xueshu.com/w/file76v5wc0w.html
8.003C++基本运算信奥赛之路1C++语法基础【信奥赛之路 1】-- C++语法基础 作者:小凡学编程003_C++基本运算算术运算和赋值运算 算术运算 C++运算符包括算术运算符、关系运算符、逻辑运算符、位操作运算符等等 其中算术运算符用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、共5种 注意: /、%后面不能为0 %两边必须都https://download.csdn.net/blog/column/12425970/132585333
9.C语言基础知识笔记1※ 关系运算符 ※ 逻辑运算符 ※ 三目运算符 2、算术运算符 C语言基本算术运算符如下表: 除法运算中注意: 如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如8/3 = 2;而两数中有一个为小数,结果则为小数,如:9.0/2 = 4.500000。 https://www.imooc.com/article/23511