C语言操作符详解(1)

124 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情

操作符和表达式

操作符

C语言操作符很多,但大致进行分类后,有以下几种操作符

//算数操作符
+ - * / %
//移位操作符
<<    >>
//位操作符
&  |
//赋值操作符
=  += -= *= /= ...
//单目操作符
sizeof() ! ++  -- & * 
//关系操作符
> >= < <= ==
//逻辑操作符
&& ||
//条件操作符
?:
//逗号表达式
 ,
//其他操作符
[] ()  ->  .   ...

算数操作符

算数操作符再常见不过, 加减乘除,取余。 + - * /操作符和我们数学上的一样。 值得注意的是 /

int c=10/3; 
   c=10.0/3;
   c=10/3.0; //c结果为3
   (double)c=10.0/3; //能计算出小数值

C语言中,/需要至少一个操作数为浮点数,才能使结果为浮点数,并且记得存在浮点数中。 %求余(取模)操作符 只能计算两个整型之间的结果,结果也为整型。 在这里插入图片描述

移位操作符

这里说的移位,指的是移动二进制位。 有左移,右移操作符。 <<左移操作符 向左移动二进制位 在这里插入图片描述 可以看到二进制左移后,a<<1a2倍,所以我们可以知道,左移一位,扩大2倍。 左移n位扩大2^n倍。 >>右移操作符 可想而知,右移操作符,也与左移效果类似,二进制位向右移动一位。 右边的二进制丢弃,右边的二进制位,并不是添像左移操作符一样添零,需要分情况讨论。 移位又分为算数移位和逻辑移位。 算数移位就是右移时,左边添加那一位是需要看二进制的符号位,添加。添加的哪一位和符号位相同。 逻辑移位就是不管左移还是右移操作,添加哪一位都是添0。 但我们需要移动一个负数时,显然逻辑移位会改变原数值得正负。 所以在一般的编译器下都采用算数移位。 在这里插入图片描述 可以看到右移操作原来的值缩小了2^n倍。 注意:左移和右移都要考虑移位后是否会溢出。 移位操作是针对移动正数位, a>>-1这样移位错误,C语言未定义。