前言:

本文内容:位运算理解、位运算真实加减乘除

推荐免费计算机底层入门讲解视频:【狂神说】最通俗易懂的计算机底层教学,二进制到汇编学习!_哔哩哔哩bilibili

位运算理解

寄存器:mov寄存器 存值

4831XD

位运算:

计算机现在可以存储所有数字(正数,浮点,字符)的运算。

0 1

位运算:

2*8最高高效计算方式。(位运算最高效)

很多底层的调试器,需要通过位来判断CPU的状态。

与运算(and &)

488CEd

全true为true,一false为false。

1
2
3
4
1011 0001
1101 1000
-------------- 与运算
1001 0000

或运算(or |)

488Oaj

true|false为true,false|false为false。

1
2
3
4
1011 0001
1101 1000
-----------或运算
1111 1001

异或运算(xor ^)

48Gay8

不一样就是1

1
2
3
4
1011 0001
1101 1000
-----------异或运算
0110 1001

非运算(单目运算符 not ~ !)

0就是1,1就是0,取反

1
2
3
1101 1000
-----------
0010 0111

通过这些可以完成加减乘除!位运算来实现加减乘除!

位运算(移动位)

  • 左移:(shl<<)

    1
    2
    0000 0001 @ 所有二进制位全部左移若干位,高位就丢弃了,低位补0
    0000 0010
  • 右移:(shr>>)

    1
    2
    0000 0001  @ 所有二进制位全部右移若干位,低位就丢弃了,高位就需要补0,1(符号位决定)
    0000 0000
1
2
3
4
5
6
7
0000 0001  1

0000 0010 2

0000 0100 4

0000 1000 8

位运算真实加减乘除

计算机只认识 0 1

基本数学是建立在 加减乘除。(加法)

4+5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#计算机是怎么操作的
0000 0100
0000 0101
----------- (加法,计算机不会直接加)
#了解计算机的实现原理

#第一步,异或,如果不考虑进位,异或就可以直接出结果。
0000 0100
0000 0101
------------
0000 0001

#第二步,与运算(判断进位,如果与运算结果位0,那就没有进位。)
0000 0100
0000 0101
------------
0000 0100

#第三步,将与运算的结果座左移一位。
0000 0100 -> 0000 1000

#第四步,异或
0000 0001
0000 1000
------------
0000 1001

#第五步,与运算(判断进位,如果与运算运算结果位0,没有进位。)
0000 0001
0000 1000
------------
0000 0000
#所以最终结果就是与运算为0的结果的上一个异或运算。
4+5=9

4-5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#计算机是怎么操作的
4+(-5)
0000 0100
1111 1011
----------- (减法,计算机不会直接加)
1111 1111 ->ff
#了解计算机的实现原理
0000 0100
1111 1011
----------异或(如果不考虑进位,异或就可以直接出结果)
1111 1111

0000 0100
1111 1011
----------与运算(判断进位,如果与运算结果位0,那就没有进位)
0000 0000
最终结果:
1111 1111 ->ff

#符号位
ff -1 255

乘:x*y,就是y个x相加,还是加法。

除:x/y,本质就是减法,就是x能减去多少个y。

计算机只会加法!