运算包括:赋值运算,算数运算,关系运算,逻辑运算,三目运算
赋值运算符=表示把右边的值赋给左边. ==两个短等号表示左右两边的关系判断是否相等.
6.算术运算符
包括+,-,*,/,%
int a=4;
int b=2;
printf("a+b=%d\n",a+b);
printf("a-b=%d\n",a-b);
printf("a*b=%d\n",a*b);
printf("a/b=%d\n",a/b);
printf("a%%b=%d\n",a%b); //注意在printf函数中为了避免编译器把%当做格式控制符,要写两个%
printf("%d\n",1.1%1.2); //错误 取余数只能是整数
int a=1.8; //高精度向低精度转换,会丢失精度
printf("%d\n",a); //1
double d=1; //低精度向高精度转换,会自动提升精度.(double)1;
printf("%f\n",d); //1.000000
//强制类型转换
int a=(int)1.8;//不会提示警告,如果不加(int)会警告 ; 低精度向高精度转换不会丢失精度,不警告
printf("%d\n",a);
//运算优先级是.从左到右 但: * = / = % > + = - 如果要人为改变则加().
int a=(2+3)*4/5%6;
printf("%d\n",a);
//运算时两个数据精度不一样,会自动类型转换,且是低精度向高精度转换
int a=1.2+3; //1.2+3.0=4.2---4;
double d=1.2+3;//1.2+3.0=4.2;
printf("%.1f\n",d);
//强制提升一个精度.另一个精度会自动提升.
double d=(double)2/3; //2/3=0.666667--d;
printf("%f\n",d);
%:取余数 只对整数有效果.符号前后都必须是整数
7.逻辑运算
|| 或:有真为真
注意:如果前面(左边)的表达式为真.则右边不会再去判断.
int b=2;
int a=1<2||b--;
printf("%d--%d\n",a,b); //1--2
&& 且(与) :有假为假,左右表达式都为真才为真.
注意:如果左边为假,则右边不会判断.
int b=2;
int a=1>2&&b--;
printf("%d--%d\n",a,b); //0--2
!非 :真假调换
int b=2;
int a=!(1<2&&b--);
printf("%d--%d\n",a,b); //0--1
自增与自减
自增:+1 自减:-1.
如果符号在前.先自增或自减,再参与别的运算.++a --a;
int a=0;
int b=++a; b这时是1;
如果符号在后.先参与别的运算,再自增或自减.a-- a--;
int a=0;
int b=a++;b这时是0;
8.关系运算
“ == ” “ > ” “ < ”“ >= ” “ <= ” “!=”
int a=1==2;//=表示赋值.==表示比较
int a=1>2;
int a=1<2;
int a=1>=2;
int a=1<=2;
int a=1!=2;
printf("%d\n",a);
优先级:>,<,>=,<=,优先级相等, 但大于==和!=.同时==与!=优先级相等.
int a=1==2>3;//先计算2>3,再计算==
printf("%d\n",a);
关系运算符结合律是从左往右,即:先看优先级,再看结合律.
int b=1!=2>3<4;//等效于:2>3为假=0. 0<4为真=1, 1!=1为假=0.所以最终结果=0;
printf("%d\n",b);
优先级:算数运算符>关系运算符>逻辑运算符>赋值运算符
()>负号>!>算数>关系>&&>||
三目运算符
有两个结果.需要根据条件是否成立来判断到底返回哪个结果.
前面表达式满足,给?号前面的结果,如果不满足,给:后面的结果.
int a=1>2?2:3;
printf("%d\n",a); //3
优美的代码:两个核心
1.用尽量少的代码去实现所需要的功能.
2.代码可读性可尽可能好.
printf("%lu\n",sizeof(int)); //4
printf("%lu\n",sizeof 2); //4
//printf("%lu\n",sizeof int); //如果不加括号的话,不能用于数据类型.报错
//需求是:用int字节数,乘以10的值
printf("%lu\n",sizeof(int)*10); //40
//任何的一个字符参与运算的时候都会转换成对应的ASCII码表对应的int值.
printf("%lu\n",sizeof('a')); //4
int d='a';
printf("%d\n",d); //97
char c='a';
printf("%lu\n",sizeof(c)); //1
//sizeof 运算结果是一个无符号的长整型.用lu占位,但是可以跟int互相转换.
int f=sizeof 2;
printf("%d\n",f); //4
//lu :无符号的长整型:表示正整数.有符号的长整型包括所有范围内的整数.
//且可以与int互相转换
unsigned long e=sizeof 2;
f=e;
printf("%lu\n",sizeof e); //8
printf("%lu\n",sizeof f); //4