c语言位运算
起因
位运算主要是包括:
- 与(&)
- 或(|)
- 非(~)
- 异或(^)
- 左移(<<)
- 右移(>>)
1. 与 (&) 真真为真,余为假
0001 //1为真 0为假
0010 //
--------
0000 //值为0
1. 代码
#include <stdio.h>
#include <stdlib.h>
//位运算 与(&)
int main(int argc,char* argv[])
{
int a = 1;
int b = 2;
int c = a & b;
printf("a&b=%d\n",c);
return 0;
}
2.或(|) 假假为假,余为真
//计算 1|2 值
//二进制换算
0001
0010
-------
0011 //十进制值为3
2. 代码
#include <stdio.h>
#include <stdlib.h>
//位运算 或(|)
int main(int argc,char* argv[])
{
int a = 1;
int b = 2;
int c = a | b;
printf("a|b=%d\n",c);
return 0;
}
3. 非(~) 按位取反
//计算 ~1 值
//涉及到补码,这里不详细说,公式计算 -(x+1)
-(1+1) //取反值为:-2
代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
int a = ~1;
printf("%d\n", a);
return 0;
}
4. 异或 (^) 真真为假,假假为假,余为真
//计算 1 ^ b
0001
0010
-------
0011 //十进制为3
4.代码
#include <stdio.h> #include <stdlib.h> int main(int argc,char* argv[]) { int a = 1; int b = 2; int c = a ^ b; printf("a^b=%d\n",c); return 0; }5. 左移 <<
//计算 1 左移1
0001
-------
0010 //十进制为2
5. 代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
int a = 1;
int b = a << 1;
int c = a << 2;
int d = a << 3;
printf("b=%d\n", b); //左移1位
printf("c=%d\n", c); //左移2位
printf("d=%d\n", d); //左移3位
return 0;
}
6. 右移 >>
//计算 8 右移1位
1000
-------
0100 //十进制为4
6. 代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
int a = 8;
int b = a >> 1;
printf("b=%d\n", b); //右移1位
return 0;
}
秋风
2018-04-14