运算符的种类以及基本用法
一、算术运算符最基础运算符名称示例说明加法358正数 / 加法运算-减法 / 负号5-32减法或表示负数如-5*乘法3*515注意不是×是*/除法5/22整数除法舍去小数5.0/22.5%取模取余5%21仅适用于整数除数不能为 0算数运算符是字符型吗?这是一个非常容易混淆的概念我们需要区分“运算符本身”和“运算符在代码中的写法”。1. 核心结论算术运算符如,-,*,/它们是语法符号代表一种操作动作。它们不是字符型数据char也不能像字符一样被存储、打印或参与数学计算。字符型数据char是用来存储单个字符如A,1,的数据类型。2. 详细对比分析为了让你彻底明白我们来看一个具体的例子❌ 错误理解把运算符当字符如果你写char op ; // ❌ 报错编译器会懵你想让 op 等于什么这是错误的因为在这里被编译器理解为“加法动作”而不是一个字符。✅ 正确理解字符型的如果你想把加号作为一个字符存起来比如为了打印出来显示你必须加上单引号char op ; // ✅ 正确这里 是一个字符数据它的 ASCII 码是 43 printf(%c, op); // 输出3. 三种情况的对比表写法含义数据类型能否参与数学运算例子加法运算符无类型 (语法符号)能(作为动作)int c a b;(执行加法)加号字符char(整型)能(作为数字 43)int c a ;(97 43)加号字符串char*(指针)不能printf(%s, );4. 常见误区演示误区一我想动态选择运算符很多初学者想这样写char op ; int result 10 op 5; // ❌ 严重错误解释C 语言不支持把字符变量直接当成运算符用。编译器在编译时就必须知道你要做什么运算它不会在运行时去读变量op里的字符然后执行加法。解决方法必须用if或switch判断字符然后手动执行对应的运算。if (op ) { result 10 5; } else if (op -) { result 10 - 5; }误区二运算符是字符串吗printf(%s, ); // ❌ 错误解释不是字符串不能用%s打印。如果你想打印加号这个符号要么直接写在格式串里printf()要么用字符%c打印。5. 总结算术运算符(,-,*,/,%) 是命令告诉编译器“做加法”、“做减法”。它们不是数据。字符型(char) 是数据用来存储信息。如果你想存储或传递一个运算符号比如用户输入了号你需要用char op ;注意单引号。如果你想执行运算你必须直接在代码里写a b或者通过if/switch根据字符变量来调用对应的运算符。一句话口诀没引号是动作运算符单引号是数据字符双引号是文本字符串。二、赋值运算符赋值 / 更新变量运算符名称示例等价写法基础赋值a5—加后赋值a3aa3-减后赋值a-3aa-3*乘后赋值a*3aa*3/除后赋值a/3aa/3%取模后赋值a%3aa%3左移后赋值a3aa3按位与赋值a3aa3三、位运算符操作二进制位运算符名称规则示例8 位二进制按位与对应位都为 1 则为 1否则为 000001111 00001000 00001000|按位或对应位有一个 1 则为 1否则为 000000111 | 00001000 00001111^按位异或对应位不同则为 1相同则为 000001111 ^ 00001000 00000111~按位取反0 变 11 变 0补码运算~00000001 11111110对应 - 2左移所有位左移 n 位右侧补 0等价 ×2ⁿ13 800000001→00001000右移所有位右移 n 位正数左侧补 0负数补 183 100001000→00000001在 C 语言中按位取反运算有一个通用公式∼n−(n1) 例~5-51核心用法| 置 1num | (1n) → 把第 n 位设为 1 清零num ~(1n) → 把第 n 位设为 0^ 取反num ^ (1n) → 把第 n 位翻转功能表达式原理简述示例效果设置为1n (1 k)或运算有1则1清除为0n ~(1 k)与取反构造“除k位外全1”的掩码0111 → 0101检查是否为1if (n (1 k))与运算结果为0则否非0则是0101 0100 ≠0四、比较运算符判断条件用于比较两个值的大小 / 相等关系返回 1真或 0假运算符名称示例结果真 1假 0大于531小于530大于等于551小于等于530等于530!不等于5!31五、逻辑运算符组合条件运算符名称规则示例逻辑与两边都为真才为真否则为假短路运算(53)(21)1||逻辑或有一边为真就为真短路运算(53)||(21)1!逻辑非真变假假变真!(53)0六、其他常用运算符运算符名称示例说明自增a/a后置先使用后 1前置先 1 后使用--自减a--/--a同上()括号(ab)*3提升运算优先级,逗号a3,b5从左到右执行返回最后一个值七、运算符优先级表优先级类别运算符结合性 (方向)说明1括号/访问()[]-.左 → 右函数调用、数组下标、成员访问2单目运算符---!~*(解引用)(取地址)sizeof(type)(强制转换)右 ← 左自增自减、正负号、逻辑非、按位取反、指针操作3算术运算*/%左 → 右乘、除、取余4算术运算-左 → 右加、减5移位运算左 → 右左移、右移 (你刚才问的在这里!)6关系运算左 → 右小于、大于等7相等运算!左 → 右等于、不等于8位与左 → 右按位与 (注意优先级高于^和 9位异或^左 → 右按位异或10位或|左 → 右按位或 (注意优先级高于)11逻辑与左 → 右逻辑与 (短路)12逻辑或||左 → 右逻辑或 (短路)13条件运算?:右 ← 左三元运算符 (a ? b : c)14赋值运算-*/%^|右 ← 左各种赋值 (优先级非常低!)15逗号,左 → 右逗号表达式 (优先级最低)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2636697.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!