03-进阶基础/06-位运算与三目运算符:修订间差异

来自三三百科
跳转到导航 跳转到搜索
33DAI留言 | 贡献
导入1个版本
->Importer
批量导入三三文档
(没有差异)

2026年5月20日 (三) 16:50的版本

位运算

位运算是直接对二进制位进行操作。

运算符 名称 说明
& 按位与 两位都为 [math]\displaystyle{ 1 }[/math] 结果为 [math]\displaystyle{ 1 }[/math]
| 按位或 两位有一个为 [math]\displaystyle{ 1 }[/math] 结果为 [math]\displaystyle{ 1 }[/math]
^ 按位异或 两位不同结果为 [math]\displaystyle{ 1 }[/math]
~ 按位取反 [math]\displaystyle{ 0 }[/math][math]\displaystyle{ 1 }[/math][math]\displaystyle{ 1 }[/math][math]\displaystyle{ 0 }[/math]
<< 左移 所有位左移,右边补 [math]\displaystyle{ 0 }[/math]
>> 右移 所有位右移,左边补符号位

常用技巧

// 判断奇偶
if (x & 1) 奇数
if (!(x & 1)) 偶数

// 乘 2 / 除 2
x << 1  // x * 2
x >> 1  // x / 2

// 2 的 k 次方
1 << k  // 2^k

// 取第 k 位(从 0 开始)
(x >> k) & 1

// 将第 k 位设为 1
x |= (1 << k)

// 将第 k 位设为 0
x &= ~(1 << k)

// 交换两个数(不借助临时变量)
a ^= b; b ^= a; a ^= b;

// 判断是否为 2 的幂
x > 0 && (x & (x - 1)) == 0

位运算法优先级

位运算符的优先级比较低,建议多加小括号。

常见优先级:+ - > << >> > > < == != > & > ^ > | > && > ||

三目运算符

条件 ? 表达式1 : 表达式2

条件为真返回表达式 [math]\displaystyle{ 1 }[/math] 的值,否则返回表达式 [math]\displaystyle{ 2 }[/math] 的值。

int max = (a > b) ? a : b;
int abs = (x >= 0) ? x : -x;
cout << (score >= 60 ? "及格" : "不及格");

三目运算符可以嵌套,但可读性会降低:

// 求三个数的最大值
int max3 = a > b ? (a > c ? a : c) : (b > c ? b : c);