C语言运算符分类与优先级C语言运算符分为7大类算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、特殊运算符。每类运算符有明确的优先级和结合性规则。算术运算符包含 - * / % --其中* / %优先级高于 -。整数除法直接舍去小数取模%仅支持整数。自增前置i先自增再使用值后置i先使用原值再自增。关系运算符包括 !运算结果只有0假和1真。逻辑运算符 || !中!优先级最高和||具有短路特性。位运算符是嵌入式开发核心包括 | ^ ~ 。寄存器操作常用三板斧置位REG | (1 n)、清位REG ~(1 n)、翻转REG ^ (1 n)。右移时无符号数逻辑右移有符号数算术右移。运算符优先级与结合性运算符优先级从高到低依次为括号和结构体访问、单目运算符、乘除模、加减、移位、关系判断、相等判断、位运算、逻辑运算、三目、赋值、逗号。绝大多数双目运算符左结合单目、三目和赋值运算符右结合。例如a b c等价于a (b c)。嵌入式开发避坑指南复杂表达式应加括号明确优先级避免依赖记忆。区分位运算与逻辑运算的使用场景寄存器操作使用 | ^逻辑判断使用 ||。禁止同一表达式多次使用/--避免未定义行为。判断相等必须用防止误写为赋值。移位操作优先使用无符号类型避免有符号负数右移异常。谨慎使用逗号运算符防止逻辑歧义。实战应用示例寄存器操作示例// 设置第3位 REG | (1 3); // 清除第5位 REG ~(1 5); // 翻转第7位 REG ^ (1 7);逻辑短路特性示例if (ptr ptr-data) // 安全访问指针 if (flag || init()) // 条件满足时跳过初始化类型安全示例uint32_t val 0xFFFF; val 4; // 无符号右移安全 int32_t val2 -1; val2 4; // 有符号右移结果依赖实现
23. C 语言运算符完整详解:嵌入式开发必看运算优先级与实战坑点
发布时间:2026/7/5 14:23:41
C语言运算符分类与优先级C语言运算符分为7大类算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、特殊运算符。每类运算符有明确的优先级和结合性规则。算术运算符包含 - * / % --其中* / %优先级高于 -。整数除法直接舍去小数取模%仅支持整数。自增前置i先自增再使用值后置i先使用原值再自增。关系运算符包括 !运算结果只有0假和1真。逻辑运算符 || !中!优先级最高和||具有短路特性。位运算符是嵌入式开发核心包括 | ^ ~ 。寄存器操作常用三板斧置位REG | (1 n)、清位REG ~(1 n)、翻转REG ^ (1 n)。右移时无符号数逻辑右移有符号数算术右移。运算符优先级与结合性运算符优先级从高到低依次为括号和结构体访问、单目运算符、乘除模、加减、移位、关系判断、相等判断、位运算、逻辑运算、三目、赋值、逗号。绝大多数双目运算符左结合单目、三目和赋值运算符右结合。例如a b c等价于a (b c)。嵌入式开发避坑指南复杂表达式应加括号明确优先级避免依赖记忆。区分位运算与逻辑运算的使用场景寄存器操作使用 | ^逻辑判断使用 ||。禁止同一表达式多次使用/--避免未定义行为。判断相等必须用防止误写为赋值。移位操作优先使用无符号类型避免有符号负数右移异常。谨慎使用逗号运算符防止逻辑歧义。实战应用示例寄存器操作示例// 设置第3位 REG | (1 3); // 清除第5位 REG ~(1 5); // 翻转第7位 REG ^ (1 7);逻辑短路特性示例if (ptr ptr-data) // 安全访问指针 if (flag || init()) // 条件满足时跳过初始化类型安全示例uint32_t val 0xFFFF; val 4; // 无符号右移安全 int32_t val2 -1; val2 4; // 有符号右移结果依赖实现