2018年4月6日
今天我们来讨论讨论C语言中的操作符。
(1)算数操作符
+ - * / %(加减乘除取模)
加减乘除适用于计算浮点和整数类型,取模只适用于计算整数类型。
需要注意的是当/除法操作符的两个操作数都是整数的时候执行整除,如果存在浮点数执行浮点数除法。
%取模是返回两个整数做除法运算的余数。
(2)移位操作符
<< >> (左移和右移)
移位操作符对数据执行位运算(二进制)。
向左或向右移动n位(n为整数且n>=0),除算数移位外空出来的位置都用0补齐。
算数移位只存在于右移,空出来的位置由符号位决定,符号位为0填入0,符号位为1填入1。
例如:1001010>>2
逻辑移位结果:0010010
算数移位结果:1110010
C89标准说明无符号数执行的都是逻辑移位,但有符号数取决于编译器。(可移植性)
(3)位操作符
& | ^(与 或 异或)
对整形类型操作数的每一位进行操作。
^或操作符可以进行简单的数据加密。(C=A^B,A=C^B,B=C^A)
(4)赋值操作符
=(赋值)
+= -= *= /= %= <<= >>= &= ^= |=(复合赋值)
只要允许出现表达式的地方都允许进行赋值。
a+=expression相当于a=a+(expression)。(注意括号)
把右值赋给左值,左值必须为可修改的数据类型。
复合操作符的优点是使代码更容易阅读和书写。
(5)单目操作符
! ~ ++ -- + - & * sizeof (类型)
需要注意的是~操作符是对整形类型的操作数进行求补操作(按位取反)。
&操作符返回类型的是一个指针类型,返回的值为地址。
sizeof操作符返回操作数的类型长度,以字节为单位。
sizeof (a),sizeof(int),sizeof a,sizeof int(错误)。
注意sizeof判断表达式的长度并不需要对表达式进行赋值。
sizeof(a=b+1)并不会改变a的值。
(类型)操作符为强制类型转换
int a=1;double d=(double)a;只是在使用a时把a看做double类型但并不会改变a的类型int。
++和--都具有前缀和后缀形式,在单独进行自加自减的时候建议用前缀形式。
注意++和--的操作数必须为一个左值,也就是可以修改的数据类型。
但是++和--不能出现在赋值操作符的左边。
(6)关系操作符
> >= < <= != ==
操作符产生的结果为整形值1和0(布尔类型在C99之后才添加)。
在if和while中,表达式的结果0为假,非0为真。
但并不建议把if(a!=0)简写为if(a)。
注意建议把if(a==0)写为if(0==a)。
(7)逻辑操作符
&& || (逻辑与 逻辑或)
注意当&&左边表达式为假或者当||左边的表达式为真时,不会再对右边的表达式进行计算。
注意逻辑操作符与位操作符的区别。
(8)条件操作符
expression1?expression2:expression3
如果表达式1的结果为真,返回表达式2的结果;如果表达式1的结果为假,返回表达式2 的结果。
(9)逗号操作符
,
返回的是最右边的表达式。
(10)下标引用、函数调用和结构成员
array[i];
strcpy(s1,s2);
p->next;
先简单了解一下。
欢迎并感谢大家在下面留言交流看法。
作者小丿萝卜,来自美丽的大重庆。
我的C故事系列主要写我在C中发现的有趣的代码或者算法。
如果大家觉得我的分享对大家学习了解C有一点点帮助,欢迎关注我的博客。
我的联系方式:微信:zhongdaidongzdd QQ:1161665939。欢迎一起交流编程知识。