https://www.bilibili.com/video/BV1gL411c7eG
原码、反码、补码https://blog.csdn.net/m0_46201544/article/details/121818968?spm=1001.2014.3001.5501
计组的内容,可以去搜一下先了解
位运算 &按位与 定义如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
举例对于这样两个数:3、5,我们先将其转化为为二进制:
3 = ( 0011 ) 2 3=(0011)_2 3=(0011)2
5 = ( 0101 ) 2 5=(0101)_2 5=(0101)2
那么我们对其进行按照位与操作可得: ( 0001 ) 2 (0001)_2 (0001)2也就是1
代码实现:
#include
int main()
{
int a = 3,b = 5;
printf("a&b = %d\n",a&b);
return 0;
}
| 按位或
定义
两个相应的二进制位中只要有一个为1,该位的结果值为1
举例对于这样两个数:3、5,我们先将其转化为为二进制:
3 = ( 0011 ) 2 3=(0011)_2 3=(0011)2
5 = ( 0101 ) 2 5=(0101)_2 5=(0101)2
那么我们对其进行按照位或操作可得: ( 0111 ) 2 (0111)_2 (0111)2也就是7
代码实现:
#include
int main()
{
int a = 3,b = 5;
printf("a|b = %d\n",a|b);
return 0;
}
^ 按位异或
定义
若参加运算的两个二进制位值相同则为0,否则为1
举例对于这样两个数:3、5,我们先将其转化为为二进制:
3 = ( 0011 ) 2 3=(0011)_2 3=(0011)2
5 = ( 0101 ) 2 5=(0101)_2 5=(0101)2
那么我们对其进行按照位或操作可得: ( 0110 ) 2 (0110)_2 (0110)2也就是6
代码实现:
#include
int main()
{
int a = 3,b = 5;
printf("a^b = %d\n",a^b);
return 0;
}
~ 取反
定义
~是一元运算符,用于求整数的二进制补码,即分别将操作数各二进制位上的1变为0,0变为1。
举例对于一个数字1,我们先对其转化为二进制并转化为补码:
(
00000001
)
H
(00000001)_H
(00000001)H然后取反,那么可以得到:
(
F
F
F
F
F
F
F
E
)
H
(FFFFFFFE)_H
(FFFFFFFE)H,然后我们再求该数的原码则得:-2
代码实现:
#include
int main()
{
int a = 1;
printf("~a = %d",~a);
return 0;
}
>1);
return 0;
}
一些应用
例如:
将该数的某一位设置为1我们通过左移和或位运算即可将该数的某一位设置为1,或者是判断是否为1
eg:x|(1k&1
更多技巧请参考这篇文章:
https://zhuanlan.zhihu.com/p/54946559
位运算相关函数__builtin_popcount(unsigned int n)
该函数时判断n的二进制中有多少个1
eg:
int n = 15; //二进制为1111
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?