编程小常识:操作符、表达式与运算符优先级

C语言中操作符和表达式 

操作符分类:算数操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符,
逗号表达式,下标引用,函数调用和结构成员

~~~ 算数操作符   +    -    *    /    %

      1.除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。
      2.多于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
      3.%操作符的两个操作数必须为整形,返回的是整出之后的余数。
~~~ 移位操作符:   << 左移操作符     >>右移操作符  
      1.左移操作符移位规则:左边抛弃,右边补零
      2.右移操作符移位规则:①逻辑移位:左边用零填充,右边丢弃
                                           ②算数移位:左边用原该值的符号为填充,右边丢弃
     (注意:对于移位运算符,不要移动负位数,这个是标准未定义的。)
~~~ 位操作符 :   &(按位与)    |(按位或)    ^(按位异或)
     (注意:他们的操作数必须是整数。
~~~ 赋值操作符 :   =    +=    -=    *=    /=    %=    >>=    <<=    &=    |=
~~~ 单目操作符 :! (逻辑反操作)   - (负值)   + (正值)   & (取地址)   sizeof (操作数的类型长度,以字节为单位)
                   ~ (对一个数的二进数按位取反)   -- (前置,后置--)   ++ (前置,后置++)   * (间接访问操作符,解引用操作符)
                   (类型) 强制类型转换

~~~ 关系操作符 :   >    >=    <    <=    != (用于测试“不相等”)    == (用于测试“相等”)
~~~ 逻辑操作符 :&&  逻辑与    ||  逻辑或
                逻辑与和按位与的区别:1&&2-----------=1   1&2----------=0  
                逻辑或和按位或的区别:1 | | 2------------=1  1 | 2----------=3  
~~~ 条件操作符 :exp1 ? exp2 : exp3    (eg:使用条件表达式实现找两个数中较大值)
~~~ 逗号表达式 :exp1,exp2,exp3,…expN
                逗号表达式,就是用逗号隔开的多个表达式。
                逗号表达式,从左向右依次执行。整个表达式的结果式最后一个表达式的结果。
~~~ 下标引用,函数调用,访问结构体的成员
1. [ ]   操作数:一个数组名+一个索引值
2. ( ) 函数调用操作符
        接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
3.访问一个结构的成员: . 结构体 . 成员名
                                     ->结构体指针->成员名
 

表达式求值:表达式求值的顺序一部分是由操作符1的优先级和结合性决定。同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。
隐式类型转换:C的整型算数运算总是至少以缺省整型的精度来进行的。为了获得这个精度,表达式的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为【整型提升】。
算数转换:如果某个操作符的各个操作符属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换。
long double     double     float     unsigned int     int
如果某个操作数的类型在上面这个列表中排名较低,那么首先转换为另一个操作数的类型后执行运算。
(注意:但是算术转换要合理,要不然会有一些潜在问题。)

操作符的属性
复杂表达式的求值有三个影响的因素:
1.操作符的优先级
2.操作符的结合性
3.操作符是否控制求值顺序
两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。

附:运算符优先级表

--------------------- 
原文:https://blog.csdn.net/ds19980228/article/details/79826412 
 

发布了21 篇原创文章 · 获赞 16 · 访问量 8353

猜你喜欢

转载自blog.csdn.net/rentan0930/article/details/92770199