目录
算数运算符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符 、逗号表达式等
+(加)? ?-(减)? ? ?*(乘)? ? ? /(除以)? ? ? %(取余)
在 printf 中,% 是格式控制符的开头,是一个特殊的字符,不能直接输出;要想输出 %,必须在它的前面再加一个 %,这个时候 % 就变成了普通的字符,而不是用来表示格式控制符了。
1.%的左右操作数必须都为整数
另外,余数可以是正数也可以是负数,由 % 左边的整数决定:
#include <stdio.h>
int main()
{
printf(
"100%%12=%d \n100%%-12=%d \n-100%%12=%d \n-100%%-12=%d \n",
100%12, 100%-12, -100%12, -100%-12
);
return 0;
}
//运行结果:
100%12=4
100%-12=4
-100%12=-4
-100%-12=-4
//注意若要打出一个% 要写%%而不是%
?2.? +、-、*、/? ? ? ?如果操作符的两个操作数其中一个操作数是小数,则执行小数运算,如果都为整数,则进行整数运算。
<<是向左移位? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?>>是向右移位
左移操作符移位规则:左边抛弃、右边补零
右移操作符移位规则:右边抛弃,左边用该值的原符号位填充、、、如果是整数,符号位为0,则左面填充0,如果为负数,符号位为1,则左面填充1
所有被操作的数以二进制进行
?&(按位与) |(按位或) ^(按位异或)?(这些操作符的操作数必须为整数)
?按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
按位或运算符“|”是双目运算符。 其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
按位异或运算符“^”是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1,相同时为0。参与运算数仍以补码出现。
?
基本的赋值运算符是“=”。一开始可能会以为它是“等于”,其实不是的。它实际上意味着把右边表达式的值赋给左边的运算数。
还有一些复合运算符? ? 0x代表十六进制的前缀
**1.+ 需要两个操作数,所以它不是一元运算符,而是二元运算符,而后者只需要一个操作数,所以 ++ 为一元运算符。
**2.自增自减的结果必须得有变量来接收,所以自增自减只能针对变量,不能针对数字,例如10++
就是错误的。
***3.++ 在前面叫做前自增(例如 ++a)。前自增:先进行自增运算,再进行其他操作。
? ?++ 在后面叫做后自增(例如 a++)。后自增:先进行其他操作,再进行自增运算。 自减(--)也一样,有前自减和后自减之分。
include <stdio.h>
int main()
{
int a = 10, b = 20, c = 30, d = 40;
int a1 = ++a, b1 = b++, c1 = --c, d1 = d--;
printf("a=%d, a1=%d\n", a, a1);
printf("b=%d, b1=%d\n", b, b1);
printf("c=%d, c1=%d\n", c, c1);
printf("d=%d, d1=%d\n", d, d1);
return 0;
}
/*输出结果:
a=11, a1=11
b=21, b1=20
c=29, c1=29
d=39, d1=40*/
表达式为:表达式1?表达式2:表达式3
先求解表达式1,
若其值为真(非0)则将表达式2的值作为整个表达式的取值,
否则(表达式1的值为0)将表达式3的值作为整个表达式的取值
条件运算符具有右结合性
例如:w < x ? x + w : x < y ? x : y
与 w < x ? x + w : ( x < y ? x : y) 等价
与 (w < x ? x + w : x < y) ? x : y 不等价
在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。
sizeof计算对象的大小也是转换成对对象类型的计算
sizeof(2);//2的类型为int,所以等价于sizeof(int);
sizeof(2+3.14);//3.14的类型为double,2也会被提升成double类型,所以等价于sizeof(double);
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行。整个表达式的结果是最 后一个表达式的结果。