神奇的位操作
2021/10/21 23:10:01
本文主要是介绍神奇的位操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 位操作用法总结
- 位操作总述
- 一 :<< 左移
- 二: >> 右移
- 三: & 与运算
- 四: | 或运算
- 五: ~ 非运算
- 六: ^ 异或
位操作用法总结
位操作总述
- 计算机使用的二进制,位运算就是对一个比特(Bit)位进行操作运算的方法。
- 位操作语法规则如下表所示:
运算符 | 含义 | 说明 |
---|---|---|
<< | 左移 | 将操作数的各个位全部左移若干位,高位丢弃,低位补0 |
>> | 右移 | 将操作数的各个位全部右移若干位,低位丢弃,高位补 0 或 1 |
& | 与运算 | 有0出0,全1出1 |
| | 或运算 | 有1出1,全0出1 |
~ | 非运算(取反) | 空即是色,色即是空 |
^ | 异或 | 相异出1,相同出0 |
- 位运算应用口诀 :
清零取反要用与,某位置一可用或
若要取反和交换,轻轻松松用异或
一 :<< 左移
- 语法规则 :
左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0 - 用法1:
如果数据较小,被丢弃的高位不包含 1,那么左移 n 位相当于乘以 2 的 n 次方:<<
相当于:*
int a, b; b = a << 3; // 相当于 b = a * 8
- 用法2:
将 int 型变量a的第k位清 0
a &= ~(1 << k)
- 用法3:
将 int 型变量a的第k位置1
a |= (1 << k)
- 用法4:
将 int 型变量循环左移k次
a = (a << k) | (a >> (sizeof(int)-k))
二: >> 右移
- 语法规则:
右移运算符>>
用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1;如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1。 - 用法1:
如果被丢弃的低位不包含 1,那么右移 n 位相当于除以 2 的 n 次方:>>
相当于:/
int a, b; b = a >> 3;// 相当于除以 b = a / 8
- 用法2:
取 int 型变量a的第k位 (k=0,1,2……sizeof(int))
a >> k & 1
- 用法3:
int 型变量a循环右移k次
a = a >> k | a << (sizeof(int)-k)
三: & 与运算
- 语法规则:
一个比特(Bit)位只有 0 和 1 两个取值,只有参与&
运算的两个位都为 1 时,结果才为 1,否则为 0 - 用法1:
检查整数是否为 2 的倍数
isEven = (i & 1) == 0; // 等价于: (i % 2) == 0;
- 用法2:
取余数,如果除数为 2 的倍数,&
可相当于:%
num & (2^n - 1) // 等价于 :num % 2^n
- 用法3:
判断 int 型变量是 奇数 还是 偶数
if( a & 1 == 0 ) // 偶数 if( a & 1 == 1 ) // 奇数
四: | 或运算
- 语法规则:
参与|运算的两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0 - 用法1:
将 a 的第 k 位置 1
a = a | (1 << k)
五: ~ 非运算
- 语法规则:
又叫取反运算符,~
为单目运算符,右结合性,作用是对参与运算的二进制位取反,0 变成 1,1 变成 0 - 用法1:
求 x 的相反数 y
y = ~x + 1;
六: ^ 异或
- 语法规则:
参与^运算两个二进制位不同时,结果为 1,相同时结果为 0 - 用法1:
交换两个数值
a = a^b; b = a^b; a = a^b;
- 用法2:
x = a ^ b ^ x; // 等价于 : if (x == a) { x = b; }else{ x = a; }
感谢阅读,如有错误,敬请见谅!!!
这篇关于神奇的位操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南