C语言的一些容易忘的语法细节(长期记录)

C语言的一些冷门语法

  • c语言|和||

c语言|和||

在C语言中,| 和 || 是两种不同的运算符,分别用于位运算和逻辑运算。以下是它们的核心区别和用法:

|(按位或)
用途:
对两个整数的二进制位进行逐位比较。

规则:
对应二进制位中至少有一个为1,则结果为1;否则为0。

示例:
int a = 5; // 二进制 0101
int b = 3; // 二进制 0011
int c = a | b; // 结果 0111(十进制 7)

特点:
操作数必须是整数类型(如 int, char, uint32_t 等)。
逐位运算,结果类型与操作数相同。

||(逻辑或)
用途:用于布尔逻辑判断

规则:
若任意一个操作数为真(非零),结果为1(真);否则为0(假)。

int x = 5;
int y = 0;
if (x || y) { // x非零,条件为真
printf(“条件成立”);
}

特点:
操作数可以是任意类型(C语言将非零值视为“真”,零为“假”)。
具有短路求值特性:如果第一个操作数为真,不再计算第二个操作数。

核心区别对比:
C语言的一些容易忘的语法细节(长期记录)_第1张图片

常见错误示例:

❌ 错误使用 | 代替 ||
int a = 5, b = 0;
if (a | b) { // 实际等价于 if(5 | 0) → if(5),条件为真
printf(“执行”);
}
// 虽然结果正确,但语义错误!应使用逻辑或 ||

❌ 错误使用 || 代替 |
uint8_t flags = 0x01;
flags = flags || 0x02; // 等价于 flags = (0x01 || 0x02) → flags = 1
// 实际意图可能是按位或,结果应为 0x03

运算符优先级:
|| 的优先级低于 |。
例如:
int result = 1 | 2 || 3; // 等价于 (1 | 2) || 3 → 3 || 3 → 1
建议用括号明确优先级。

总结:
|:用于位操作(如设置硬件寄存器、组合标志位)。
||:用于逻辑判断(如 if、while 条件)。

记住:
| 操作的是二进制位,|| 操作的是真/假逻辑!

你可能感兴趣的:(c语言,开发语言,单片机,iot,mcu,物联网)