运算符分类
算术运算符(+ - * / % )
关系运算符(> < == >= <= !=)
逻辑运算符(! && ||)
位运算符(<< >> ~ | ^ &)
赋值运算符(=及其扩展赋值运算符)
条件运算符(?:)
逗号运算符(,)
指针运算符(*)
求字节运算符(sizeof())
强制类型转换运算符((类型))
分量运算符(. ->)
下标运算符([ ])
其他(如函数调用运算符())
算数运算符及算数表达式
运算顺序* / % + -。
除了%运算符外,其余几种运算符既适用于浮点型数,又适用于整型数。当操作符的两个操作数都是整型数时,他执行整除运算,其他情况下执行浮点型运算。%为取模运算符,他接收两个整型操作数,将左操作数除以右操作数,但它的返回值是余数,而不是商。由算术运算符所组成的式子成为算数表达式,表达式一定有一个值。
例如:
int main() {
int a=10;
int b=3;
int result=a%b;
printf("%d\n",result);//输出结果为1 10/3=3....1
return 0;
}
关系运算符和关系表达式
关系表达式的值只有真和假,对应的值为1和0.由于C语言中没有布尔类型,所以在C语言中0值代表假,非0代表真。关系运算符的优先级低于算数运算符。
逻辑运算符
逻辑运算符!、&&、|| 依次为逻辑非、逻辑与、逻辑或。逻辑非的优先级高于算数运算符,逻辑与和逻辑或的优先级低于关系运算符。逻辑表达式的值只有真和假,对应的值为1/0.
例如:逻辑与
int main() {
int a;
while(scanf("%d",&a))
{
if(a>3&&a<10) {
printf("a between 3 and 10\n");
}
else
{
printf("a is not among 3 and 10");
}
}
return 0;
}
***不能用(3<a<10) 原因:当a=4时,满足条件 此时结果为1 1<10 条件成立。
如:当a=20 满足a>3 结果为1 仍a<10 ,条件仍然成立 会直接打印第一条输出语句。
所以需要用逻辑与来进行条件判断。
例题 判断是否为闰年。
#include <stdio.h>
int main() {
int year;//定义一个年份
scanf("%d", &year);//输入年份
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
短路运算
int main() {
int i=0;
int j=1;
i&&printf("you can't see me1\n");//i为假 不输出后面日志 i为真 输出日志
j&&printf("you can't see me2\n");//j为真 输出
/*if(i)
{
printf("you can't see me");
}
else{
printf("you can't see me111");
}*/
int k=0;
k||printf("you can't see me3\n");//前面的值为假 才会输出后面的语句
// 如果前面为真 无论后面表达式是真是假都不会进行输出
return 0;
}
赋值运算符
必须理解左值和右值的区别。左值是那些能够出现早赋值符号左边的东西,右值是 哪些可以出现在赋值符号右边的东西。例如:
a=b + 25;
其中a是左值,因为它表示了一个可以存储结果值的地点;a+25是一个右值,因为它指定了一个值。
可以互换位置吗?
不能,因为它每个位置都包含一个值,所以原先用作左值的a此时也可以作为右值,然而b+25不能作为左值,因为它并未表示一个特定的位置(并不对应特定的内存空间)。因此,不能左右互换位置。
求字节运算符sizeof
sizeof()不是一个函数,而是一个运算符,用于求常量或变量所占用的空间大小,和逻辑非的运算顺序一样。示例:
int main() {
int b=sizeof (10);
printf("%d\n",b);//4
return 0;
}
相关联系源码:自行查找项目Project3