学习二进制

什么是二进制

计算机是由逻辑电路组成的, 计算机底层通信就是通过电信号传递的,逻辑电路通常只有两个状态接通和断开, 这两种状态证号可以用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不在同一个子网。

原文地址:https://www.cnblogs.com/daly/p/11088863.html