文章目录
操作符
算数操作符
C提供了所有常用的算数操作符:
+ - * / %
- 除了%操作符,其余几个操作符都是既适用于浮点类型又适用于整数类型。
- 当/操作符的两个操作数都是整数时,它执行整除运算,在其他情况下则执行浮点数除法。
- %为取模操作符,它接受两个整型操作数,把左操作数除以右操作数,但它返回的值时余数而不是商。
移位操作符
移位操作知识简单地把一个值的位向左或向右移动。
- 在左移位中,值最左边的几位被丢弃,右边多出来的几个空位则由0补齐。
- 右移位操作存在一个左移位操作不曾面临的问题:从左边移入新位时,可以选择两种方案。一种是逻辑移位,左边移入的位用0填充;另一种是算数移位,左边移入的位由原先该值的符号位决定,符号位为1则移入的位均为1,符号位为0则移入的位均为0,这样能够保持原数的正负形式不变。
- 算数左移和逻辑左移是相同的,它们只在右移时不同,而且只有当操作数是负值时才不一样。
- 左移位操作符为
<<
,右移位操作符为>>
。
位操作符
位操作符对它们的操作数的各个位执行AND、OR和XOR(异或)等逻辑操作。
位操作符有:
& | ^
- 它们分别执行AND、OR和XOR操作。它们要求操作数为整数类型,它们对操作数对应的位进行指定的操作,每次对左右操作数的各一位进行操作。
赋值
赋值用一个等号表示。
- 赋值操作符的结合性(求值的顺序)是从右到左,所以下面这三个表达式是等价的:
a = x = y + 3;
a = ( x = y + 3);
x = y + 3; a = x;
复合赋值符
到目前为止所介绍的操作符都还有一种复合赋值的形式:
+= -= *= /= %=
<<= >>= &= ^= |=
以+=
操作符为例,其用法如下:
a += expression
它的功能相当于下面的表达式:
a = a +expression
单目操作符
C具有一些单目操作符,也就是只接受一个操作数的操作符。它们是
! ++ - & sizeof
~ -- + * (类型)
- !操作符对它的操作数执行逻辑反操作。
- ~操作符对整型类型的操作数进行求补操作,操作数中所有原先为1的位变为0,所有原先为0的为变为1。
- -操作符产生操作数的负值。
- +操作符产生操作数的值:换句话说,它什么也不干。
- &操作符产生它的操作数的地址。
- ==*操作符是间接访问操作符,它与指针一起使用,用于访问指针所指向的值。==如:
int a, *b
...
b = &a;
这个例子中,表达式b的值时变量a的地址,但表达式*b的值则是变量a的值。
- sizeof操作符判断它的操作数的字节数,其结果自然取决于你所使用的环境。
- (类型)操作符被称为强制类型转换(cast),它用于显式地把表达式的值转换为另外的类型。
- 增值操作符++和减值操作符–如下例所示:
int a, b, c, d;
...
a = b = 10; //a和b得到值10
c = ++a; //a增加至11,c得到的值为11
d = b++; //b增加至11,但d得到的值仍为10
关系操作符
这类操作符用于测试操作数之间的各种关系。这些操作符是:
> >= < <= != ==
- !=用于测试“不相等”。
- ==操作符用于测试“相等”。
关系操作符的结果是整型值,所以它可以赋值给整型变量,但通常它们用于if或while语句中,作为测值表达式。
逻辑操作符
逻辑操作符有&&和||,它们用于对表达式求值,测试它们的值是真