黑马程序员——C语言——运算符

来源:互联网 发布:扫描线填充算法 编辑:程序博客网 时间:2024/06/07 23:53

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


1. 运算符的分类

按功能分:

算术运算符

关系运算符

逻辑运算符

按位运算符:二进制数的计算

按参与运算操作数的个数:

一目运算符  eg: ++, !, sizeof

二目运算符  eg:+,-

三目运算符  eg: ? :


2 运算符的优先级

运算符的优先级分15等级,1级最高,15级最低。

优先级高的的先于低的运算,优先级相同的时候,考虑运算符的结合性运算


3. 算术运算符

+(正号运算符) - (负号运算符)  +,-,*,/ , %

注意:除号(/)运算符,参与运算的操作数均为整数时,运算结果也是整数,舍去小数;如果有一个数是实型,结果是双精度实型

示例代码:

    int a=10, b=3, result1=0;    float f=3.0f, result2=0.0f;    result1=a/b;  //result1=3    result1=a/f;  //result1=3,因为result1是int类型,只能存放整数    result2=a/f;  //result2=3.333333

求余运算符使用注意事项:;

%运算符要求操作数都是整数

可以用对2取余判断一个数的奇偶性

m%n:

m和n都不能是小数

m=0,值是0

n=0,没有意义

m<n,值是m

m>n,正常取余

m<0,结果是负数

n<0,正负性取决于m


4. 数据类型转换

隐式数据类型转换(自动数据类型转换)

        float f1=18.4f;    int num=12;    int sum=f1+num;    printf("%d\n",sum); //打印结果是30    float f2=f1+num;printf("%f\n",f2);//打印结果是30.400000,最后一个小数位的0是无效数字printf("%d\n",(int)(f1+num));  //强制类型转换,把float转换为int类型


5. 赋值运算符

作用:把等号右侧的值赋值给左侧的变量

变量=值(或表达式);

注意:等号左侧一定是变量。

给变量连续赋值时要先定义,再逐个赋值:

eg: int a1,b1,c1;    a1=b1=c1=10;

不能 int a2=b2=c2=20;


符合赋值运算符——先运算,再赋值

+=,-=,*=,/=,%=


6. 自增自减运算符

++,--  单目运算符,右结合性

前缀表达式:++x, --x    先自增自减,再使用x值做表达式的值

后缀表达式:x++,x --    先使用x值做表达式的值,再自增自减

代码示例:

    int a=3,b=3, result1=0,result2=0;    result1=a++;  //result1=3    result2=++b;  //result2=4    printf("result1=%d,result2=%d",result1,result2);

注意:

无论使用a++,还是++a,最终执行完后,a的值都会+1

自增和自减只能用于单个变量,不能用于常量或表达式


7. sizeof运算符——计算变量、常量、数据类型正在内存中占用的字节数

以字节形式给出操作数存储的大小

        //sizeof计算常量在内存中的字节数    int a=sizeof(1);  //4    int b=sizeof(2.3f); //4    int c=sizeof(2.3);  //8    int d=sizeof('a'); //4    printf("%d,%d,%d,%d\n",a,b,c,d);    //sizeof计算变量在内存中的字节数    int num=10; float f1=2.3f; double d1=2.3; char ch='a';    int result1=sizeof(num);    //4    int result2=sizeof(f1);     //4    int result3=sizeof(d1);     //8    int result4=sizeof(ch);     //1    printf("%d,%d,%d,%d\n",result1,result2,result3,result4);    //sizeof计算某种数据类型在内存中的字节数    int e=sizeof(int);  //4    int f=sizeof(float);  //4    int g=sizeof(double);   //8    int h=sizeof(char);     //1    printf("%d,%d,%d,%d\n",e,f,g,h);    

注意:

char类型常量以ASCII存储,占4个字节,char类型变量把字符的ASCII转换成二进制存储,占一个字节

sizeof用在常量和变量的时候可以省略括号,用在数据类型的时候不可以


8. 逗号运算符

','运算符,把两个表达式链接起来组成一个表达式,称为逗号表达式

一般形式  表达式1,表达式2

逗号表达式求值,对逗号连接的每个表达式逐个求值,用最后一个表达式的值的值作为整个逗号表达式的值。

eg: int a =1, b=2, c=3;   a=(a+b,c+2);   把c+2的值作为整个逗号表达式的值赋值给a

逗号表达式使用注意:

a. 可以嵌套使用  

b. 可以简化代码   eg:a++; b++;   ——> a++, b++;

c. 并不是所有出现逗号的地方都能组成逗号表达式,比如定义多个变量的时候


9. 关系运算符(左结合)

>, <  , ==  ,!= , >= , <=

关系表达式:用关系运算符连接的式子

关系表达式的值:真(1) 假(0)

关系运算符的优先级: (>, <  , >= , <=) > (==  ,!= )


10. 逻辑运算符(左结合)

&&   ||    !

逻辑表达式的值:真(1)  假(0)

 短路或:第一个条件表达式的值为真,后面表达式就不进行判断了

eg: int x,y,z,result=-1;   x=y=z=0;

result=++x||++y||&&z++;   第一个表达式++x的值是1,为真,后面表达式就不参与运算

 短路或:第一个条件表达式的值为假,后面表达式就不参与运算


11. 三目运算符(右结合)

?: ——条件运算符

格式:表达式1?表达式2:表示3

如果表示式1的值为真,表达式2的值作为整个表达式的值

如果表示式1的值为假,表达式3的值作为整个表达式的值



1 0