运算符和表达式 |
您所在的位置:网站首页 › qq邮箱的正确填写方式是什么 › 运算符和表达式 |
1.什么是表达式? 表达式就是用来表达某个意思的式子。 在C语言中,表达式就是用运算符连接操作数的式子。 我们认为,带 ; 的就是语句,没有分号的就是表达式 如: 3+5 2.C语言中的运算符 (1)算术运算符:双目运算符,运算顺序:左==>右 + - * / % ⭐注意:整数/整数其结果还是整数,想要结果为实数,可在最前面 *1.0 1.0*5/2 ==> 隐式类型转换:高精度数据与低精度数据计算时,其结果自动向高精度转换 eg : unsigned int a = 10; // 0~2^32-1 int b = -20; // -2^31 - 2^31-1 a+b > 5 ==> yes 无符号数据与有符号数据运算,结果为无符号数据。 %:取余运算符,在C语言中,要求两个操作数都为整数,且不能对0取余 eg:5.5%2 // 语法错误 5%3 2%3 -5%2 5%-2 -5%-2 2 2 -1 1 -1 (2)关系运算符:双目运算符,结合性:左->右,表达两个式子的关系 > >= < 4>3 的值是多少???why??? 0/1 ==> 1>3 ==> 0 5>4>3 语法错误,正确的书写方式:5>4 && 4>3 (3)逻辑运算符:表达某数理逻辑的表达式 值:真==>1 或 假==>0 !!注意:在C语言中,所有非0的数值都表达真,但是计算结果为真则一定是1 !(逻辑非),单目运算符,用来取逻辑上的反 &&(逻辑与),双目运算符,“并且”,结合性:左->右 a && b && c ||(逻辑或),双目运算符,“或者”,结合性:左->右 ⭐在C语言中,运算是“惰性运算”,如果事先就知道了某个表达式的结果,那么该表达式 就不一定会计算完。 eg: a && b && c // 0 && () 括号里面的表达式就没必要计算(“优化”) 只有当a的值为真时,才有必要去计算b的值 只有当 a和b 的值为真时,才有必要去计算c的值 a || b || c 只有当a的值为假时,才有必要去计算b的值 只有 a和b 的值为假时,才有必要去计算c的值 (4)位运算符:按bit位来进行运算操作的运算符 ~:按位取反,单目运算符 &:按位与,双目运算符 (有0则为0,都是1才为1) 0 & x ==> 0 (x的取值0或1) 1 & x ==> x |:按位或,双目运算符 (有1则为1,都是0才为0) 1 | x ==> 1 0 | x ==> x ^:按位异或,双目运算符。不同为1,相同为0 1 ^ x ==> !x 0 ^ x ==> x: :右移,双目运算符,按bit位向右移动 逻辑右移:最低位丢失,最高位补0 算术右移:最低位丢失,最高位补符号位 在C语言中,并没有规定右移是逻辑右移还是算术右移,不同的编译器在实现 C语言的右移的时候,可能不一样。 (5)赋值运算符:双目运算符,结合性:右->左,优先级排名倒数第二 = eg: a = 5+3; 注意:赋值运算符的左边必须是“可写的地址”。 复合的赋值运算符:赋值运算符可以和算术运算符、位运算符组合成复合的赋值运算符。 += : a += 5 ==> a = a + 5 -= *= : a *= 3+5 ==> a = a*(3+5) /= %= &= |= ^= = (6)条件运算符:三目运算符 结合性:从右到左 格式:表达式1 ? 表达式2 : 表达式3 求值顺序:如果表达式1的值为真,则整个条件运算符表达式的值为 表达式2 的值 如果表达式1的值为假,则整个条件运算符表达式的值为 表达式3 的值 注意:条件运算表达式也有 惰性运算 (7)逗号运算符:双目运算符,优先级最低,左->右 格式:表达式1,表达式2 求值顺序:先计算表达式1的值,再计算表达式2的值,整个逗号表达式的值为表达式2的值。 逗号表达式的扩展: 表达式1,表达式2,表达式3,...表达式n 求值顺序:先计算表达式1的值,在计算表达式2的值,...最后计算表达式n的值, 然后整个逗号表达式的结果为表达式n的值。
(8)♥指针运算符(* &) 单目运算符 (9)♥分量运算符(. ->) 用来求结构体变量的成员变量 a.i // a是结构体变量 p->i // p是结构体指针 (10)♥下标运算符( [] ) 取数组中的元素 int a[10]; a[3], a[5] (11)强制类型转换运算符(要转换的类型) eg: float a = 3.6; printf("%d\n", (int)a); // 3 (12)求字节运算符 (sizeof) 不是一个函数! sizeof 运算的结果跟圆括号里的数据类型相关,单位是字节 sizeof(3.6) sizeof(double) sizeof(3.6f) sizeof(float) short s; sizeof(s+1) ==> sizeof(int) sizeof s // sizeof后面可以不带括号,但是不能没有空格 (13)自增、自减运算符(++ --),单目运算符 表达式的值 执行完整个表达式后i的值 i++ i i=i+1 ++i i+1 i=i+1 i-- i i=i-1 --i i-1 i=i-1 注意:1)应该避免使用 i = i++; 2)应该避免把自增和自减用得特别复杂,有可能会被优化 ⭐运算符得优先级和结合性的总结 () [] -> . 自左向右 ! ~ ++ -- +-(正负号) 自右向左 单目运算符 * / % 自左向右 算术运算符 + - < >= 自左向右 关系运算符 == != & | ^ > 自左向右 位运算符 && 自左向右 逻辑运算符 || ? : 自右向左 条件运算符 = 自右向左 赋值运算符 , 自左向右 逗号运算符 注意:计算表达式的时候,先判断各运算符之间的优先级,再看运算符的结合性, 同时还需要注意惰性运算,优先级如果记不住,请自觉打括号。 单目运算符 > 算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符 单目运算符:!,0 算术运算符:双目运算符, + - * / %(加减乘除) 关系运算符:双目运算符,结合性:左->右,表达两个式子的关系 > >= < |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |