ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

# C 语言学习|Day3:常见操作符与表达式求值

# C 语言学习|Day3:常见操作符与表达式求值 一、算术操作符 - * / %全部属于双目操作符两个操作数参与运算。int a 4 22; //加法 int b 61 - 23; //减法 int c 5 * 5; //乘法⚠️两个高频坑除法/整数除法直接舍弃小数如果两边都是整数执行整除。6/4结果为1不是 1.5。想要小数结果至少一边写成浮点数6.0 /4。float x 6 / 4; // 输出1.000000整数先做整除 float y 6.0 /4; // 输出1.500000浮点数除法实战坑(5/20)*100结果是 0因为5/20整数整除得到 0改成(5/20.0)*100才能得到预期结果。取模%只允许整型操作数用来求余数结果正负号由第一个操作数决定。printf(%d\n,11%-5); //1 printf(%d\n,-11%-5); //-1 printf(%d\n,-11%5); //-1小技巧num%10可以拿到整数的最后一位数字。二、赋值操作符是赋值不是数学的等于相等判断要用。int a 100; //初始化定义变量同时赋值 a 200; //赋值变量已经存在重新修改值1. 连续赋值int a3,b0,c0; c b a3; //从右往左运算不推荐写连续赋值可读性差调试不方便建议拆开写b a3; c b;2. 复合赋值符简化代码等价改写。常用 - * / %int a 10; a 3; //等价 a a3 a -2; //等价 a a-2注意左边必须是变量不能是常量。三、单目操作符只有一个操作数本次重点、--、正号、负号-。1. 自增 、自减 –核心区分前置、后置前置a口诀先 1后使用int a10; int b a; //a先自增到11再赋值给ba11b11后置a口诀先使用后 1int a10; int b a; //先把a原始值10赋值ba再自增a11b10--逻辑完全一样只是操作变成减 1。注意/--只能用于变量不能用于常量(10)直接报错。2. 单目、-正号可省略-负号用来翻转数值正负。int a 10; int b -a; //b-10四、表达式求值表达式 操作符 操作数组合用来算出一个结果。表达式求值由优先级、结合性、类型转换共同决定。4.1 优先级和结合性优先级优先级高先算。类似数学括号 自增自减 乘除取模 加减 赋值。3 4*5*优先级高先算 4*5。记不全优先级就多加括号括号优先级最高提升可读性。结合性优先级相同时看结合方向大部分双目运算符* / -左结合从左往右算赋值操作符右结合从右往左算。4.2 类型转换分为隐式编译器自动做、显式强制转换。整型提升char、short这类小于 int 的类型参与运算会自动提升为 int 再计算。char c100; short s2000; int i cs; //c和s提升为int之后再相加常规算术转换不同大类型混合运算统一转换成同一类型。int 和 float 运算int 自动转为 float。强制类型转换显式转换格式(类型)表达式int a5,b2; float c (float)a / b; //a强制转为float实现浮点除法4.3 警惕问题表达式未定义行为C 语言标准没有规定子表达式计算顺序如果同一个变量在表达式中被多次修改结果不可预测不同编译器运行结果不一样要坚决避免写这类代码。示例不要模仿int i 1; int r (i)(i)(i); //未定义行为不同编译器输出不一样✅建议尽量拆分复杂表达式一行只做简单运算不要把多个自增写在同一个表达式内。本期学习总结算术操作符重点记住整数除法陷阱%只能操作整数分清赋值和相等判断复合赋值简化代码尽量少写连续赋值单目/--分清前置后置口诀只能用于变量表达式求值记住优先级、结合性有隐式、强制类型转换拒绝问题表达式不要在同一个表达式多次修改变量保证代码可移植。✍️课后小练习敲代码对比7/2和7.0/2的输出差异写代码验证前置 、后置 变量变化使用强制类型转换实现两个整数相除输出小数结果。
返回列表