奇妙的位运算
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语言中的位运算
最后更新于