奇妙的位运算

November 10, 2022

前言

在计算机里面,所有的数据都是以二进制来进行存储的, 那么,我们在计算的时候不仅仅要知道十进制的计算, 也要知道二进制的计算 (+、-、*、/),这些都是叫位运算,即将符号位共同参与运算的运算。

位运算的种类

接下来来看看有哪些运算

符号描述作用
+加法用二进制的方法进行加法运算
-减法用二进制的方法进行加法运算
&与运算两个位都为1时,结果才为1
|或运算两个位都为0时,结果才为0
^异或运算两个位相同为0,相异为1
~反取0反1,1反0
«左移运算所有二进位全部左移位,高位丢弃,低位补0
»右移运算所有二进位全部右移位,对无符号数,高位补0;有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

计算方式

<p>加法和减法就不再过多赘述!!!</p>

‘&’ 与运算

AND一样

0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

负数补码形式参加按位与运算。

‘|’ 或运算

OR一样

0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1

负数补码 形式参加按位或运算。

‘^’ 异或运算

AOR一样

0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0

‘~’ 取反运算

NOT一样

~1 = 0
~0 = 1

‘«’ 和 ‘»’ 左右位移运算

将一个运算对象的各二进制位全部左(右)移若干位左(右)边的二进制位丢弃,右边补0

a = 1010 0101;  # a << (>>) n
a << 2   --------- >    a = 1001 0100;
a >> 2   --------- >    a = 0010 1001;

总结

在进行计算的时候,计算机中的数在内存中都是以二进制形式进行存储的,用位运算就是直接对整数在内存中的二进制位进行操作,因此其执行效率非常高,在程序中尽量使用位运算进行操作,这不仅可以锻炼自己的二进制运算,还会大大提高程序的性能。

外部链接

此文参考菜鸟教程-C语言中的位运算

最后更新于