C语言第7天,运算符、表达式和类型转换

一、表达式的定义

运算符往往需要与运算对象一起使用才有意义。例如:5+10中,5与10是运算对象,+为运算符。在C语言中,一个或多个运算对象与零个或多个运算符组成表达式。

表达式语句:表达式后面加上分号构成表达式语句。C语言中表达式不能单独存在,必须以表达式语句的形式存在。

对于除法,请特别注意整型无法整除时,出现浮点类型数据的问题。

eg.int a,b;

a=5;b=2;

float c;

c=a / b;

printf("%f\n",c);

在C语言里面,整型与整型运算的结果,依然是一个整型。结果的小数部分被丢弃,这一过程被称作截断

a / b后,结果仍然是一个整型,数值已经被截断了,这时候,我们再赋给一个浮点型的c。也只能是整数2转成浮点2.0了,没有起到效果。

那我们将a,b,c都改为float,这样就不会出现截断了。a,b将会进行浮点运算,结果也是一个浮点数类型float。

二、自增、自减运算符

++为指自增运算符,--为自减运算符。它们仅需要运算符左边或右边有一个运算对象即可。

1.前缀模式

#include<stdio.h>

int main()

{int a,b;

a=10;b=10;

printf("%d %d\n",++a,--b);

printf("%d %d\n",a,b);

return 0;}

运算结果为11 9

所以前缀模式的作用为将使用时的结果进行+1或者-1,并产生额外作用(将运算对象本身+1/-1)

2.后缀模式

将运算符放在运算对象的后面

与前缀模式不同,后缀模式使用时的结果不变,但会产生与前缀模式相同的额外作用

一元运算符:只有一个运算对象的运算符。例如:自增运算符++,自减运算符--。

二元运算符:有两个运算对象的运算符。例如:赋值运算符=,加法运算符+。

三、关系运算符与逻辑运算符

1.关系运算符

#include<stdio.h>
int main()
{
printf("%d\n", 1 > 2);
printf("%d\n", 1 < 2);
return 0;
}

输出结果为

0

1

表达式关系成立,表达式结果为真,用1表示真。表达式关系不成立,表达式结果为假,用0表示假

大于>,小于<,等于==,不等于!=,大于等于>=,小于等于<=

2.逻辑运算符

逻辑或||和逻辑且&&

例题.1.如何表达2<=X<=10

解:(x>=2)&&(x<=10)

2.如何表达x<=2或x>=10

解:(x<=2)||(x>=10)

逻辑非!

可以对当前的结果,取它的反向。

#include<stdio.h>

int main()

{printf("%d\n",2!=3);

printf("%d\n",!(2!=3));//尽量使用多一些的括号清晰地表达意图

return 0;}

结果为1

0

三、运算符优先级

C语言的四则运算符优先级和数学中的一致。先算括号里面的,先乘除后加减。

 

 

四、类型转换

在同类型数据之间和不同类型数据运算之间会发生数据的类型转换

eg #include<stdio.h>

int main()

{//一个整型指针变量p

int*p;

//各式各样的类型

char c;

short s;

int n;

unsigned int un

long l;

float f;

double df;

p=c+n;//char+int=int

p=c+s;//char=short=int

p=s+n;//short+int=int

p=n+n;//int+int=int

p=n+un;//int+unsigned int=unsigned int

p=n+l;//int+long=long

p=n+f;//int+float=float

p=f+df;//float+double=double

return 0;}

类型级别的高低

在运算中若运算符两边的类型均低于int,那么结果为int,若两边运算类型有高于int的,那么结果为高于int的最高类型

字面常量也一样,5 / 2,int与int运算,结果为int。

5 / 2.0,int与double运算,结果为double。

5.0 / 2.0,double与double运算,结果为double。

另外,赋值造成的类型转换中,小的整型类型可以赋值给大的,大的整型类型不能赋值给小的,不然会报错

五、强制类型转换   

 在本文第一个代码中,我们了解到了截断,整型与整型运算无法得到浮点型,但强制转换可以做到这一点

使用公式:(类型)需要转换的数据对象

#include<stdio.h>

int main()

{int n1,n2;

n1=5;n2=2;

printf("%f\n",(float)n1/n2);//将n1强制转换为float类型

printf("%f\n",(double)n1/n2);//将n1强制转换为double类型

return 0;}

结果为

2.500000
2.500000

请注意,强制类型转换,并不能影响n1和n2变量原本的类型。它们只是改变了运算时的临时数据对象的类型。

 

 

 

 
 
 
posted @ 2022-09-13 12:12  纯爱暴打ntr  阅读(264)  评论(0)    收藏  举报