C语言运算符总结

优先级


 最高的  ()[]  ->   .


!     ~       ++    --  -    (type)x/(type x)     *  &     sizeof


*     /       %      +     -


<<   >>


<    <=     >    >=


==     !=


&    ^      |     &&      ||      ?:


=     +=   -=    *=    /=   %=     <<=     >>=   &=   ^=   |=

最低的 ,    


结合方向  

除了  单  三   赋值运算符这三种是从右往左外,其他的都是从左往右


细节

++自增运算符 ,存在a++和++a两种情况

前者代表先传递值然后自加,后者代表先自加然后传递值


关系运算符的结果是一个逻辑值:关系成立则为真,值为1     关系不成立则为假,值为0


左移和右移位移的是存在内存中的二进制代码,即补码

左移一位等同于*2,且高位左移溢出了就丢弃 

 右移一位等同于/2,切低位超出也会被舍弃,右移时左边高位如果是无符号数则补0,有符号的称为算术右移,符号位如果是0则补0,符号位如果是1则补1

如(a+7)>>3     +7的存在用于解决右移过程中向负数取整的问题

~取反的操作包括符号位在内一并取反

位运算的操作对象必须是 char  short int

&按位与      与1不变    与0置0

|按位或        或0不变   或1置1

^按位异或   对应位相同为0   若不同则为1

a+=2与a=a+2等价  但是由于内部副本机制,效率上a+=2要高于后者

按位操作要秉承先清0后写入的顺序操作,如下

a&~(0x7<<27)|(0x5<<27)

&& || ! 逻辑运算 表达式的结果用真1或假0表示

0表示逻辑假值

-0 0.0 \0 NULL 等效

非0即表示逻辑真 如5 3 !0

逻辑||运算存在求值顺序,当左边为真时,右边即短路不再运算

如 0&& b=2 关系式左边已经为假,逻辑关系式结果必定为假0,那么右边的赋值运算便不再继续,称为短路










猜你喜欢

转载自blog.csdn.net/daylasitu/article/details/80889696