位运算
运算符号 | 运算法则 |
---|---|
与(&) | 两个 位都为1时值才为1 |
或() | 两个 位只要有一个数为1,值就为1 |
– | – |
非(~) | 取反,0变成1,1变成0 |
异或() | 两个位相同为0,相异为1 |
– | – |
记住一点,位运算是将十进制的数转化为二进制后进行的运算,就像十进制的加减乘除一样,不过二进制下更多的是加1,减1,乘以2,除以2,因为是二进制嘛
***位运算符的计算主要用在二进制中。实际开发中也经常会遇到需要用到这些运算符的时候,同时这些运算符也被作为基础的面试笔试题。所以了解这些运算符对程序员来说是十分必要的。于此,记录下我所理解的运算符:***如果以开关开灯论:有这样两个开关,0为开关关闭,1为开关打开。
与运算(&)(两个二进制下的位都是1,值才是1)
例如,32&8结果是几呢,我们来看看
32在二进制下表示为0001 0000
8在二进制下表示 为 0000 1000
进行位与运算,因为两个位都为1时,值才为1
所以结果是0000 0000
`#include<bits/stdc++.h>
using namespace std;
int main()
{
cout<<(int)(32 & 8);//这里要用到强制转换,因为位运算的结果还是二进制下的,我们无法直接输出,所以需要加一个(int)进行强制转换,来达到输出十进制的目的
return 0;
}
`
果不其然,运行结果为0
或运算(两个 二进制下的位只要有一位为1,值就为1)
在或运算中两个开关是并联的,即一个开关开,则灯开。
如果任意一个开关开了,灯都会亮。
只有当两个开关都是关的,灯才不开。
理解为A(或)|B任意开则开
我们还是举个例子
例如32与8进行或运算,
32在二进制下表示为 0001 0000
8在二进制下表示 为 0000 1000
(从左往右规定第几位)
第一位,0与0进行或运算,结果为0,因为都是零,没有1;
第二位,0与0进行或运算,结果为0,因为都是零,没有1;
第三位,第六位,第七位,第八位都类似;
第四位,第五位是1与0进行或运算,因为两个 二进制位上有一个1,所以结果为0;
最后结果为0001 1000,再进行强制转换,输出40;
代码如下;
#include<bits/stdc++.h>
using namespace std;
int main()
{
cout<<(int)(32|8);
return 0;
}
非运算(在二进制下对位上的数进行取反,如1取反变成0,0取反变成1)
我们对32进行非运算,正如名字所说,取反,取反,取反
非运算即取反运算,在二进制中1变0,0变1
运算方法:取相反数减一
异或运算(相同为0,相异为1)
异或运算通俗地讲就是一句话
同为假,异为真