什么是二进制
计算机是由逻辑电路组成的, 计算机底层通信就是通过电信号传递的,逻辑电路通常只有两个状态接通和断开, 这两种状态证号可以用1,0表示。二进制数据就是用0和1两个数码来表示的数。
这个我们经常可以在战争剧中看到, 他们在发送电报的时候,通过点击手柄,发送出去的就是电信号,不过他们使用了摩尔斯编码。
进制转换
我们常见的有二进制,十进制, 八进制,十六进制,这些进制之前是可以相互转换的。
二进制与其他进制进行相互转换
- 十进制转二进制 ==》 除2取余法
(150)10 = (10010110)2
- 二进制转八进制 ==》3位二进制一组
(11001011)2 = (11 001 011)2 = (313)8 = (203)10
- 二进制转八进制 ==》4位二进制一组
(11001011)2 = (1100 1011)2 = (cb)16 = (203)10
二进制的运算
- 四则运算
1. 加法
2. 减法
-
逻辑运算
1. 按位与运算符(& 叫做and)
规则:0&0 = 0, 0&1 = 0, 1&1=1.
两位同时为1,结果为1,否则为0
(00000011) & (00000101) = (00000001)
2.按位或运算符( | 或者叫做or)
规则:0|0 = 0,1|0 = 1,0|1 = 1,1|1 = 1
参加位运算的两位只要有一个为1,那么就为1
(00000011) | (00000101) = (00000111)
3.异或运算符(^ 也叫xor(⊕也表示异或))
规则:0^0 = 0,0^1=1,1^0=1,1^1=0
参加位运算的两位只要相同为0,不同为1
(00000011)^(00000101 = (00000110)
特别的任意数 ^ 0 = 任意数.
4.取反运算符(~)
规则:二进制位0变为1,1变为0
5.左移(<<)
规则:相当于乘以2
6.右移(>>)
规则:相当于除以2
机器数
数在计算机中的表示形式统称为机器数。
最高位存放符号, 正数为0,负数为1
机器数有2个特点:一是符号数字化,二是其数的大小受机器字长的限制。
- 真值
第一位是符号位,所以机器数的形式值不等于真正的数值
将带符号位的机器数对应的真正数值称为机器数的真值
0000 0001的真值 = +000 0001 = +1
1000 0001的真值 = -000 0001 = -1
在计算机内,有符号数有3种表示法:原码、反码和补码。
- 原码
原码是符号位加上真值的绝对值,即用第一位表示符号, 其余表示值. 例如8位二进制:
[+1]原码 = 0000 0001
[-1]原码 = 1000 0001
八位二进制的取值范围:
[1111 1111, 0111 1111] = [-127, 127]
原码是有符号数的最简单的编码方式,便于输入输出,但作为代码加减运算时较为复杂
- 反码
反码的表示方法:
正数的反码是其本身;
负数的反码是在其原码的基础上, 符号位不变, 其余各个位取反;
[+1] = [0000 0001]原码 = [0000 0001]反码
[-1] = [1000 0001]原码 = [1111 1110]反码
- 补码
补码的表示方法:
正数的补码就是其本身;
负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后加1(即在反码基础上加1);
[-1] = [1000 0001]原码 = [1111 1110]反码 = [1111 1111]补码
在计算机系统中, 数值一律用补码来表示(存储)。数据在计算机中主要是以补码的形式存储的。
使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理;此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
计算机中采用二进制的主要原因
- 技术实现简单:只有0,1两种状态;
- 简化运算规则:0,1运算规则简单;
- 适合逻辑运算:只有两个数码,正好和真假吻合;
- 易于进行转换:二进制与十进制易于相互转换;
- 抗干扰能力强,可靠性高等:只有两种状态,容易区分;
二进制的一个应用场景
- 判断以下两个IP地址是否在同一子网
192.168.10.100/25
192.168.10.200/25
知识背景:
IP地址分为两部分:网络部分和主机部分, 网络部分用于标识子网。
子网掩码:表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。
比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
获取子网地址的方法:将IP地址与子网掩码进行AND(按位与)运算。
192.168.10.100/25的IP地址二进制表示:
192.168.10.100: 11000000 10101000 00001010 01100100
192.168.10.100/25的子网掩码二进制表示(主要25表示前25位为网络位):
子网掩码:11111111 11111111 11111111 10000000
AND运算结果:
192.168.10.200/25 AND运算结果:
最后得出的网络地址不一样,所以这两个IP不在同一个子网。