美文网首页
三、表达式和数据类型转换

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

作者: 澈尘PastChen | 来源:发表于2023-10-06 22:23 被阅读0次

    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        字符串

    相关文章

      网友评论

          本文标题:三、表达式和数据类型转换

          本文链接:https://www.haomeiwen.com/subject/jusmbdtx.html