c语言中位运算符怎么计算(C语言位运算)
c语言中位运算符怎么计算(C语言位运算)//计算 1 ^ b 0001 0010 ------- 0011 //十进制为3示例代码:#include <stdio.h> #include <stdlib.h> //位运算 取反 ~ int main(int argc char* argv[]) { int a = ~1; printf("%d\n" a); return 0; }位运算 取反操作//计算 1|2 值 //二进制换算 0001 0010 ------- 0011 //十进制值为3示例代码:#include <stdio.h> #include <stdlib.h> //位运算 或(|) int main(int argc char* argv[]) { int a = 1; int b =
起因最近在看wrk(压力测试工具)源码 发现里面使用很多地位运算 这是在工作上很少用到的.位运算是二进制计算的.使用位运算性能会好一些.
位运算主要是包括:
- 与(&)
- 或(|)
- 非(~)
- 异或(^)
- 左移(<<)
- 右移(>>)
0001 //1为真 0为假
0010 //
--------
0000 //值为0
示例代码:
#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
示例代码:
#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
示例代码:
#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
示例代码:
#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
示例代码:
#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;
}
位运算 右移操作
个人能力有限 如果您发现有什么不对 请私信我
如果您觉得对您有用的话 可以点个赞或者加个关注 欢迎大家一起进行技术交流