三、表达式和数据类型转换

2023-10-06  本文已影响0人  澈尘PastChen

1.运算符和表达式

C语言有丰富的运算符和表达式,正是这些独具风格的运算符和表达式,使得C语言的应用更加广泛,每种运算符除了具有优先级外,还具有不同的结合性,形成了C语言的特色。

运算符:单目运算符、双目运算符、三目运算符

优先级:

括号运算符,单目运算,双目运算,算术运算,逻辑运算符,移位运算,最后逗号运算。

(1)算术运算符                        (+  -  *  /  %  ++  --)

(2)关系运算符                        (>  >=  <  <=  ==  !=)

(3)逻辑运算符                        (!  &&  ||)

(4)位运算符                            (&  |  ^  ~  <<  >>)

(5)赋值运算符                        (=)

(6)条件运算符                        (?:)

(7)逗号运算符                        (,)

(8)指针运算符                        (*  &)

(9)求字节数运算符                (sizeof)

(10)强制类型转换运算符      ((类型))

(11)成员运算符                      (->)

(12)下标运算符                      ([])

(13)其它                                  (如函数调用运算符())

算术表达式是由算术运算符将运算量连接起来的式子。在C语言中算术运算符分为基本的算术运算符和自增与自减运算符两类。

基本的算术运算符:+、-、*、/、%

自增、自减运算符:++、--

在一个表达式中,若要提高其运算的优先级,可使用“()”。

基本的算术运算的结合方向是左结合的。

对于除法运算,若两个运算量都是整数,则进行整数除运算;若有一个运算量为实数,则进行实数除运算。

自增和自减运算符只能用于变量,不能用于常量和表达式。

使用自增和自减运算符时,注意避免二义性。

由赋值运算符“=”组成的式子称作赋值表达式。表达式的一般形式如下:

        <变量名> = <表达式>

例如:x=5

            a=b+3*c

            a=5+(c=6)

            y=max(a,b)

赋值运算符的结合方向是右结合的。

可以连续给若干变量赋相同的值。

C语言中没有赋值语句,在赋值表达式后加上分号,就称为赋值语句。

若赋值号右边的表达式与左边变量的数据类型不一致,系统将会自动进行类型转换,转换成变量的类型。

在赋值运算符“=”之前加上其它运算符,可以构成复合的赋值运算符。C语言中给出了10种复合的赋值运算符。它们是:+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=。

系运算符主要用于判断条件的表达式 ,决定值和值之间的关系。C语言提供了六种关系运算符 :>、>=、<、<=、==、!=。关系表达式是用关系运算符将两个操作数连接起来的表达式,关系表达式产生的值只有两个:真(值为1)和假(值为0)。

例如:int a=3,  b=5,c=1,d,f,g;

            d=a+4>b;        //d的值为1

            f=a<b>=c;      //f的值为1

            g=b-a==c;      //g的值为0

关系运算符“<、>、<=、>=”的优先级相同,“==、!=”的优先级相同。前4种高于后2种。

关系运算符的优先级低于算术运算符,高于赋值运算符。

关系运算符的结合方向是左结合的。

赋值号“=” 不同于等号“ ==”

因为浮点型变量有精度限制,尽量不要使用浮点型变量做相等或不相等的关系比较运算。

有时判断的条件不是一个简单的条件,而是由几个给定简单条件组成的复合条件, 可以通过逻辑运算符实现。C语言中有3种逻辑运算符 :!(逻辑非)、&&(逻辑与)、||(逻辑或)。

逻辑运算符主要用于进一步明确关系表达式之间的关系,逻辑表达式的结果与关系表达式的结果一样,只有两个:真(值为1)和假(值为0)。

逻辑运算符的优先级从高到低的顺序是:!→&&→||。

逻辑运算符中的“&&”和“||”的优先级低于关系运算符,由于“!”是单目运算符,其优先级高于算术运算符。

系统给出的逻辑值只有两个值1(真)和0(假),而在逻辑表达式中参与逻辑运算的操作对象可以是任何非0值或0值,可以是字符型、浮点型、枚举型或指针型的数据。

① (表达式1) && (表达式2) :若 “表达式1”的值为假(0),则整个表达式的结果为假,且不计算“表达式2”的值,但会检查语法错误。只有“表达式1”的值为真(1),才计算“表达式2”的值。

② (表达式1) || (表达式2) :若 “表达式1”的值为真(1),则整个表达式的结果为真,且不计算“表达式2”的值,但会检查语法错误。只有“表达式1”的值为假(0),才计算“表达式2”的值。

条件运算符是由两个符号(?和:)组成,有3个操作对象,称为三目运算符,它是C语言中唯一的一个三目运算符。

条件表达式的一般形式为:

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

例如:max=a>b?a:b

功能:两个数的最大值,如果a>b,则max=a;否则max=b。

条件运算符的优先级高于赋值运算符,低于关系运算符和算术运算符。

条件运算符的结合方向是右结合的。

表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。

“表达式1”、“表达式2”和“表达式3”的类型都可以不同,条件表达式值的类型是“表达式2”和“表达式3”中类型较高的类型。

在C语言中,“,”称为逗号运算符,通过逗号运算符,可以将两个或多个表达式连接起来,构成逗号表达式。

逗号表达式的一般形式如下:

        <表达式1>,<表达式2>,……,<表达式n>

运算过程:先求表达式1的值,再求表达式2的值,……,最后求表达式n的值,而整个表达式的值是表达式n的值。

例如:x=(3+4,a=3, a*5),该x的值是15。

逗号运算符的优先级最低

不是C程序中所有有逗号的地方都是逗号表达式,定义变量时用的逗号是间隔符,而不是逗号运算符

逗号表达式多出现在循环语句中

sizeof是一个单目运算符,它返回常量、变量或数据类型在内存中所占的字节数

求字节数运算符的一般形式如下:

        sizeof(常量|变量|<数据类型标识符>)

运算过程:先求表达式1的值,再求表达式2的值,……,最后求表达式n的值,而整个表达式的值是表达式n的值。

例如:x=(3+4,a=3, a*5),该x的值是15。

2.数据类型转换

在C语言中,参加运算的数据必须具有具体的数据类型,如果一个运算符两侧的数据类型不同,则先进行类型转换,使二者具有相同的数据类型,然后再进行运算。

数据类型转换(自动转换 、强制类型转换)

对于各种数据类型,将占用字节数少的数据向占用字节数多的类型转换。其转换规则如下图所示

char型和int型数据进行运算,系统先将char型的ASCII值与int型数据进行运算,计算结果为int型。

float和double型数据进行运算,系统将所有float型转换成double型,然后进行运算,计算结果是double型。

int型、float型与double型数据进行运算,系统先将int型和float型转换成double型,然后进行运算,计算结果是double型。

C语言提供了使用类型转换运算实现强制类型转换的方法。

强制类型转换的一般形式为:

        (<类型标识符>) (<表达式>)

作用是把表达式的运算结果强制转换成类型标识符所表示的类型。例如:

        (int)a;              //把a的值转换成int型

        (float)(a+b);    //把表达式a+b的值转换成float型

类型标识符和表达式都应该用括号括起来。否则只对其后的变量进行强制类型转换。

在强制类型转换时,得到一个所需类型的中间数据,而原来变量的类型未发生变化。

3.输入与输出

输入函数:scanf( ) (如报错scanf_s)    输出函数:printf(  )

C语言要求输出的数据与格式要匹配,指定输出的类型

格式化符号

1、%d    有符号十进制整数

2、%f      浮点十进制整数

3、%e      浮点e记数法

4、%o      无符号八进制整数

5、%x      无符号十六进制整数

6、%u      无符号十进制整数

7、%c      单个字符

8、%s        字符串

上一篇下一篇

猜你喜欢

热点阅读