携手创作,共同成长!这是我参与「掘金日新计划 · 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<<1是a的2倍,所以我们可以知道,左移一位,扩大2倍。
左移n位扩大2^n倍。
>>右移操作符
可想而知,右移操作符,也与左移效果类似,二进制位向右移动一位。
右边的二进制丢弃,右边的二进制位,并不是添像左移操作符一样添零,需要分情况讨论。
移位又分为算数移位和逻辑移位。
算数移位就是右移时,左边添加那一位是需要看二进制的符号位,添加。添加的哪一位和符号位相同。
逻辑移位就是不管左移还是右移操作,添加哪一位都是添0。
但我们需要移动一个负数时,显然逻辑移位会改变原数值得正负。
所以在一般的编译器下都采用算数移位。
可以看到右移操作原来的值缩小了
2^n倍。
注意:左移和右移都要考虑移位后是否会溢出。
移位操作是针对移动正数位,
a>>-1这样移位错误,C语言未定义。