计算机中位运算的理解

155 阅读3分钟

序言:位运算是一种直接对整数在内存中的二进制位进行操作的运算。它有很多优点,比如效率高、节省空间、可以实现一些特殊的功能等。

位运算涉及到以下几种运算符:

与运算(and &)

两个都为1,结果为1

1011 1001
1101 1000
-----------
1001 1000

或运算 (or |)

只要有一个为1,结果为1

1011 1001
1101 1000
-----------
1111 1001

异或运算(xor ^)

不相同则为1

1011 1001
1101 1000
-----------
0110 0001

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

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

1011 0001
-----------
0100 1110

位运算(移动位)

左移:(ssl <<)

所有二进制位全部左移若干位,高位就丢弃了,低位补0

0000 0001
----------左移一位
0000 0010

右移:(ssr >>)

所有二进制位全部右移若干位,低位就丢弃了,高位就需要补0,1(符号位决定。)

0000 0001
----------右移一位
0000 0000

位运算的加减乘除:

首先计算机只认识0和1。那么开始我们的示例:

4+5=?

#计算机是怎么操作的!
0000 0100
0000 0101
-----------(加法,计算机是不会直接加的)
0000 1001

#计算机的实现原理

#第一步:异或:如果不考虑进位,异或就可以直接出结果。
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=?

# 4-5就是 4 +(-5)
0000 0100
1111 1011  -5是有符号数,要经过原码反码补码进行编译
----------(减法:计算机是不会直接减的)
1111 1111

0000 0100
1111 1011
----------异或:如果不考虑进位,异或就可以直接出结果。
1111 1111

0000 0100
1111 1011
---------与运算:判断进位,如果与运算结果为0,没有进位。
0000 0000

#最终结果 1111 1111   ff