数值运算 - 加法运算

发布时间 2023-06-14 17:00:45作者: 穷凶极恶哆啦A梦

数值的存储

  • 数值在计算机中以1和0存储,任何值的运算,都是以位运算为基础进行的

位运算

  • |(或):有1取1
    • 0 | 0 = 0
    • 0 | 1 = 1
    • 1 | 0 = 1
    • 1 | 1 = 1
  • &(且):两者都为1取1
    • 0 & 0 = 0
    • 0 & 1 = 0
    • 1 & 0 = 0
    • 1 & 1 = 1
  • ^ (异或):相同为0, 不同为1
    • 0 ^ 0 = 0
    • 0 ^ 1 = 1
    • 1 ^ 0 = 1
    • 1 ^ 1 = 0
  • ~ (取反): 取相反值(注意,不是数学意义上的取相反值 ~10 不等于 -10)
    • ~1 = 0
    • ~0 = 1
  • << (左移):高位丢弃,低位补0
  • (右移):无符号数,高位补0,低位丢弃;有符号数,高位补上对应符号(正数补0, 负数补1)

基本运算

加法
  • 以8位存储的 5 和 15为例:

​ 0000 0101

​ 0000 1111

  1. 步骤一:取得需要进位的数和不需要进位的数
    1. 进位数:0000 0101 & 0000 1111 = 0000 0101
    2. 不进位:0000 0101 ^ 0000 1111 = 0000 1010
  2. 步骤二:进位数右移一位,不进位数不动
    1. 进位数:0000 0101 << 1 = 0000 1010
    2. 不进位:0000 1010
  3. 步骤三:此时进位数和不进位数相加即为最终值,那么又回到了步骤一之前,重复步骤一、二,直到进位数为0
    1. 进位数:0000 0000
    2. 不进位:0001 0100
  4. 最终值即为不进位数 20
减法
  • a - b = a + (-b),这看起来可能是个毫无意义的公式,但是它可以帮助我们将减法变为加法,统一加减法之后,机器底层只需要记住怎么做加法