算数运算符补充

(如有不太正确的地方,请在评论指出,鄙人在另行改正)!
**

位运算符:|,^,&

**
定义1为真,0为假;
逻辑或( |):
运算规则:
有true则true,无true则false;
如:1001 |1100=1101
异或(^):
运算法则:
相同为false,不同为ture;
如:100^101=001;
逻辑与(&):
运算法则:
全true才true,有假则假;
如:1001&1100=1000;

<think> 嗯,用户这次问的是C语言运算符优先级和每种运算符的具体内容。看起来用户可能在编程时遇到了优先级混淆的问题,需要一份清晰的参考。 从用户补充的站内引用来看,用户已经掌握了一份简略版的优先级列表,但似乎缺乏具体运算符的详细说明。用户上次的问题是关于快速排序的,这次突然转向C语言基础,可能是正在学习编程基础知识的新手。 需要特别注意几点:首先,用户明确要求包含"每种运算符包含的内容",所以不仅要列出优先级顺序,还要解释每个运算符的功能和典型用法。其次,引用[1]中把逻辑或写成"逻辑与运算符"明显是笔误,必须在回答中修正。最后,考虑到用户可能是初学者,解释时要避免过于专业的术语。 在整理优先级列表时,发现有些细节需要特别注意:比如条件运算符(三元运算符)的优先级容易弄错,移位运算符常被误认为优先级高于比较运算符。另外,单目运算符的右结合性这种高级特性,虽然用户没直接问,但和优先级密切相关,还是应该简单提一下。 用户没有要求示例代码,但运算符优先级最容易出错的就是组合表达式,所以考虑加上几个典型例子。比如*p++和(*p)++的区别,位运算与比较运算混合时的处理等,这些实际编程中的高频痛点。 参考了C99标准文档,确认了引用[1]中缺失的逗号运算符优先级是正确的。不过发现它把"逻辑或"错误归类为"逻辑与运算符",这必须在回答中修正并提醒用户注意。 考虑到用户上次接受了带编号的问题列表形式,这次也准备采用类似结构。把15级优先级做成表格形式最清晰,但用户要求用行内公式,所以改用编号列表加重点标注的方式。遇到运算符符号时都加了LaTeX公式包装,比如按位与写成$&$,这样既能避免markdown解析冲突,也更美观。 最后考虑设计三个延伸问题:优先级记忆技巧是用户当前最需要的;类型转换问题虽然用户没提,但实际编程中经常和优先级混淆;结合性是多数初学者容易忽略的高级话题。这样应该能覆盖用户可能的后续需求。 </think> 以下是C语言运算符的完整优先级列表(从高到低)及各类运算符的详细说明,参考C99标准整理: ### 运算符优先级及内容说明 1. **第1优先级:括号与成员访问** - `()` 函数调用:`func(x)` - `[]` 数组下标:`arr[i]` - `.` 结构体成员访问:`obj.member` - `->` 结构体指针成员访问:`ptr->member` - **结合性**:从左到右 2. **第2优先级:单目运算符** - `++`/`--` 自增自减:`i++`(后缀), `++i`(前缀) - `+`/`-` 正负号:`-5`, `+var` - `!` 逻辑非:`!flag` - `~` 按位取反:`~0xFF` - `*` 解引用:`*ptr` - `&` 取地址:`&var` - `sizeof` 类型大小:`sizeof(int)` - **结合性**:从右到左(例:`*ptr++` 等价于 `*(ptr++)`) 3. **第3优先级:乘除模(算数运算符)** - `*` 乘法:`a * b` - `/` 除法:`a / b` - `%` 取模:`a % b` - **结合性**:从左到右 4. **第4优先级:加减(算数运算符)** - `+` 加法:`a + b` - `-` 减法:`a - b` - **结合性**:从左到右 5. **第5优先级:移位运算符** - `<<` 左移:`a << 2` - `>>` 右移:`a >> 1` - **结合性**:从左到右 6. **第6优先级:关系运算符(大小比较)** - `<` 小于:`a < b` - `>` 大于:`a > b` - `<=` 小于等于:`a <= b` - `>=` 大于等于:`a >= b` - **结合性**:从左到右 7. **第7优先级:相等性运算符** - `==` 等于:`a == b` - `!=` 不等于:`a != b` - **结合性**:从左到右 8. **第8-10优先级:按位运算符** - `&` 按位与:`a & 0x0F`(第8级) - `^` 按位异或:`a ^ b`(第9级) - `|` 按位或:`a | b`(第10级) - **结合性**:从左到右 9. **第11-12优先级:逻辑运算符** - `&&` 逻辑与:`a && b`(第11级) - `||` 逻辑或:`a || b`(第12级) - **结合性**:从左到右 10. **第13优先级:条件运算符(三元)** - `?:` 条件选择:`a > b ? a : b` - **结合性**:从右到左 11. **第14优先级:赋值运算符** - `=` 赋值:`a = 5` - `+=`/`-=` 复合赋值:`a += 3` - `*=`/`/=`/`%=` 等扩展赋值 - **结合性**:从右到左(例:`a = b = 0` 等价于 `a = (b = 0)`) 12. **第15优先级:逗号运算符** - `,` 顺序求值:`a = (b=1, c=2)` → `a=2` - **结合性**:从左到右 ### 关键示例解析 ```c int x = 10, y = 5, z = 2; int r = x * y + z << 1 & 0xFF; // 等价于:(((x * y) + z) << 1) & 0xFF ``` ```c *p++; // 等价于 *(p++); 先取*p的值,再p自增 (*p)++; // 先取*p的值,再对该值自增 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值