运算符和表达式

您所在的位置:网站首页 qq邮箱的正确填写方式是什么 运算符和表达式

运算符和表达式

#运算符和表达式| 来源: 网络整理| 查看: 265

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