编程小常识:操作符与表达式

C语言中操作符和表达式 

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

逻辑操作符:&&  逻辑与    ||  逻辑或
                逻辑与和按位与的区别:1&2---------->0  1&&2----------->1
                逻辑或和按位或的区别:1 | 2---------->3  1 | | 2------------>1
条件操作符:exp1 ? exp2 : exp3    (使用条件表达式实现找两个数中较大值)
逗号表达式:exp1,exp2,exp3,…expN
                逗号表达式,就是用逗号隔开的多个表达式。
                逗号表达式,从左向右依次执行。整个表达式的结果式最后一个表达式的结果。
下标引用,函数调用的结构成员
1. [ ]   操作数:一个数组名+一个索引值
2. ( ) 函数调用操作符
        接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
3.访问一个结构的成员: . 结构体 . 成员名
                                     ->结构体指针->成员名
表达式求值表达式求值的顺序一部分是由操作符1的优先级和结合性决定。同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。
隐式类型转换:C的整型算数运算总是至少以缺省整型的精度来进行的。为了获得这个精度,表达式的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为【整型提升】。
算数转换:如果某个操作符的各个操作符属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换。
long double     double     float     unsigned int     int
如果某个操作数的类型在上面这个列表中排名较低,那么首先转换为另一个操作数的类型后执行运算。
(注意:但是算术转换要合理,要不然会有一些潜在问题。)
操作符的属性
复杂表达式的求值有三个影响的因素。
1.操作符的优先级
2.操作符的结合性
3.是否控制求值顺序
两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。



猜你喜欢

转载自blog.csdn.net/ds19980228/article/details/79826412