c语言位运算
起因
位运算主要是包括:
- 与(&)
- 或(|)
- 非(~)
- 异或(^)
- 左移(<<)
- 右移(>>)
1. 与 (&) 真真为真,余为假
0001 //1为真 0为假
0010 //
--------
0000 //值为01. 代码
#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 //十进制值为32. 代码
#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 //十进制为34.代码
#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 //十进制为25. 代码
#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 //十进制为46. 代码
#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




