运算符:算术运算符、赋值运算符、复合赋值运算符、自增自减运算符、sizeof运算符、逗号运算符、关系运算符、逻辑运算符、三目运算符;
单目运算符、双目运算符、三目运算符;
运算符的结合性(前提是优先级必须相同)分为:左结合性、右结合性;
运算符的优先级:分为十五级;
算术运算符中 m%n 求余注意:1.m和n都不能为小数;
2.m<0结果为负数 如-3%10;
3.n<0结果为正数 正负取决于m不取决于n;
赋值运算符只有一个就是等号 将等号左侧的值给等号左侧的变量;等号左侧必须是一个变量;
复合赋值运算符 如+= -= *= /= %= 表示的是两步 先运算 后赋值 他是双目运算符 例子如下:int a=3 b=4;a+=b的含义其实就是a=a+b a-=b就相当于a=a-b;
自增自减运算符是单目运算符 ++a前缀表达式 a++后缀表达式 加加在前先加加 加加在后 后加加;其实意思就是++a
是先要加上1在赋值给变量 a++是a的值就是表达式的值 然后a的值加1;无论++a还是a++ a的值最后都会加上1;
sizeof运算符 是单目运算符 它不是一个函数 要切记 ;它是用来计算常量、变量、数据类型在内存中的字节数;
它的用法如下在常量的计算中 {可以省略括号}sizeof(1)表示计算常量 1 在内存中占用的字节数 输出来是4 因为1是十进制的整数
sizeof(2.3f)计算单精度float常量在内存中的字节数 4
sizeof(2.3)计算double常量在内存中的字节数 8
sizeof(‘a’)计算字符char常量在内存中的字节数 4
它在变量的运算中{可以省略括号} int a=10;float f1=2.3f; double d1=2.3 char ch=‘a’;
result=sizeof(a)计算int类型变量a在内存中占用的字节数 4
result=sizeof(f1 计算float类型的变量f1在内存中占用的字节数4
result=sizeof(d1)计算double类型变量d1在内存中占用的字节数8
result=sizeof(ch)计算char类型变量ch在内存中占用的字节数 1
它在数据类型的运算中{用在数据类型时不能省略括号}
sizeof(int)4
sizeof(float)4
sizeof(double)8
sizeof(char) 1
逗号表达式:1、可以嵌套使用 如(a++,(a+b,a+3,a+b))
2、有时候我们不太注意逗号表达式的值 而是注重运算过程中哪些部分发生变化;
3、并不是所有出现都好的地方都能组成逗号表达式 例如定义变量时;
关系运算符 包含有 > < == ! >= <=; 这个表达式只有两种结果 要么真要么加 真用1表示 假用0表示;
关系运算符的结合性为 左结合 如 int a=3 b=4 result=-1;
result=a>b<3;
此时输出的结果为1 因为 3>4为假 所以为0 然后0<3为真所以最后为1
又比如result=a==b>3 首先必须先算b>3因为优先级是>在==前 所以最后结果为0 因为b>3的值为1 a不等于1所以为0;
逻辑运算符 一般的形式为 表达式 逻辑运算符 表达式 它的返回值也是一个真 一个假 分别用1和0表示;
&&与 ||或 !非 10<a<b 表示方法为 a>10&&a<b 注意非的用法 因为非的优先级是第二级必须先运算非,例如 int a=3; !a<3 就必须先运算!a这一部分 即让a变成0 然后0<3 为真 答案为1;
且非的结合性是右结合性 再举个例子 !!!a 先 计算!a 为0 然后!0为1 !1为0;
切记一点 所有的数 非0 就是1 ;非1就是0
逻辑与的优先级高于逻辑或 1 || 0 && 0就要从右边开始计算 等同于1 || (0 && 0)
int x,y,z;
x=y=z=0 result=-1;
result=++x || ++y && z++;
此时result的值就为1 但是x的值为1 y=z=0 这里有一个逻辑或短路了 因为逻辑或只要一真为真 只要有一个是真就真了 后面的就不会执行了 ++x就为1了 那么后面是|| 后面的就不会执行 ;
逻辑与也一样会短路 跟逻辑或的情况是一样的 只要有一个是假 后面的就不会执行了 一假为假;
三目运算符 格式是表达式1 ? 表达式2 :表达式3 ;
它的求职顺序:表达式1的值为 真,那么表达式2的值为这个三目运算表达式的值 否则第三个为这个三目运算表达式的值;
利用它来求三个数的最大值程序如下
#include<stadio.h>
int main(){
int num1,num2,num3,max=0;
num1=num2=num3=0;
//提示用户输入三个数并以逗号隔开
printf("请输入三个数,并以逗号隔开:%s/n");
//接收用户输入的三个数,并存到num1 num2 num3 中
scanf("%d,%d,%d",&num1,&num2,&num3);
//用max接收num1和num2的最大值
max=num1>num2?num1:num2;
//用max接收num1和num2的值与num3的值比较中的最大值
max=max>num3?max:num3;
printf("max=:%d",max)
return = 0
} |
|