1、 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 2.1 数据类型数据类型 2.2 标识符、常量与变量标识符、常量与变量 2.3 基本运算基本运算 2.4 数据类型转换数据类型转换 2.5 程序举例程序举例 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.1 数据类型数据类型2.1.2 整型整型 归纳起来,归纳起来,C语言定义了语言定义了6种整型,分别是:种整型,分别是:基本整型基本整型 int无符号基本整型无符号基本整型 unsigned int短整型短整型 short或或short int无符号短整型无符号短整型 u
2、nsigned short或或unsigned short int长整型长整型 long或或long int无符号长整型无符号长整型 unsigned long或或unsigned long int C C语言没有规定各种整数类型的表示范围,即没有规定各种整语言没有规定各种整数类型的表示范围,即没有规定各种整数的二进制编码长度(数据在内存中所占的位数)。数的二进制编码长度(数据在内存中所占的位数)。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.1 数据类型数据类型 表中列出了一般表中列出了一般PC机上规定的整数类型及相关数据。机上规定的整数类型及相关数据。【注意【注意】在在Visu
3、al C+6.0Visual C+6.0中,基本整型(含中,基本整型(含无符号基无符号基本整型本整型)与)与长整型(含无符号长整型)在内存中所占的长整型(含无符号长整型)在内存中所占的字节数以及表示的取值范围对应相同。字节数以及表示的取值范围对应相同。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.1 数据类型数据类型2.1.3 实型 C语言中实型数据又称浮点型数据。语言中实型数据又称浮点型数据。Turbo C提供了三种提供了三种表示实数的类型:表示实数的类型:单精度浮点数类型,简称浮点类型单精度浮点数类型,简称浮点类型 float 双精度浮点数类型,简称双精度类型双精度浮点数类型,
4、简称双精度类型 double 长双精度类型长双精度类型 long double 实型的相关规定实型的相关规定 安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.1 数据类型数据类型 安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.1 数据类型数据类型 字符类型的相关规定。字符类型的相关规定。由于由于ASCII码字符的取值范围是码字符的取值范围是0127,因此,既可以用,因此,既可以用char类型表示,也可以用类型表示,也可以用unsigned char类型表示;扩展类型表示;扩展ASCII码字符的取值范围是码字符的取值范围是0255,因此,在,因此,在128255范范围内的扩
5、展围内的扩展ASCII码字符只能用码字符只能用unsigned char类型表示。类型表示。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.2 标识符、常量与变量标识符、常量与变量 2.2.1 标标识符符 1.标识符标识符 具体命名规则如下:具体命名规则如下:(1)标识符的只能由下划线标识符的只能由下划线“_”、数字、数字09与与26个大小写字母个大小写字母(az,AZ)构成。)构成。Turbo C最多识别最多识别32个字符,个字符,Microsoft C最多识别最多识别8个字符。个字符。(2)标识符的首字符必须是字母或下划线标识符的首字符必须是字母或下划线“_”而不能是数字而不能是
6、数字或其它符号。或其它符号。(3)C语言中大小写字母是敏感的,即在标识符中,大写字语言中大小写字母是敏感的,即在标识符中,大写字母和小写字母代表不同的意义。例如:母和小写字母代表不同的意义。例如:Name和和name是两是两个不同的标识符。个不同的标识符。(4)标识符不能使用系统关键字,因为关键字是系统的保留标识符不能使用系统关键字,因为关键字是系统的保留字,它们已有特定的含义。字,它们已有特定的含义。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.2 标识符、常量与变量标识符、常量与变量 2.关键字关键字 所谓关键字是指系统预定义的保留标识符,又称之为保所谓关键字是指系统预定义的保
7、留标识符,又称之为保留字。它们有特定的含义,不能再作其它用途使用。留字。它们有特定的含义,不能再作其它用途使用。ANSI C定义的关键字共定义的关键字共32个:个:安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.2 标识符、常量与变量标识符、常量与变量 2.2.2 常量常量1.整型常量整型常量(1)十进制整数:如十进制整数:如154、565、-6523。(2)八进制整数:以八进制整数:以0开头的数是八进制数。如开头的数是八进制数。如0123表示八进表示八进制数的制数的(123)8,等于十进制数,等于十进制数83。(3)十六进制整数:以十六进制整数:以0 x开头的数是十六进制数。如开头
8、的数是十六进制数。如0 x4a即即(4a)16,等于十进制数,等于十进制数74。在上述方法表示的整数后面附一个字母在上述方法表示的整数后面附一个字母l或或L作后缀,即作后缀,即可表示该数据的类型是长整型的。例如可表示该数据的类型是长整型的。例如-63L、0123LU、0 x4aL等分别表示十进制有符号长整型数、八进制无符号等分别表示十进制有符号长整型数、八进制无符号长整型数和十六进制有符号长整型数。长整型数和十六进制有符号长整型数。安 庆 师 范 学 院 计 算 机 与 信 息 学 院 安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.2 标识符、常量与变量标识符、常量与变量 C语言中
9、的常用转义字符及这些字符的含义语言中的常用转义字符及这些字符的含义 安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.2 标识符、常量与变量标识符、常量与变量 4.字符串常量字符串常量 字符串常量是由一对双引号括起来的字符序列组成的,例字符串常量是由一对双引号括起来的字符序列组成的,例如如“abc”、“a”等都是字符串常量。等都是字符串常量。字符串常量与字符常量的区别:字符串常量与字符常量的区别:(1)字符常量由单引号括起来,字符串常量由双引号括起来。字符常量由单引号括起来,字符串常量由双引号括起来。(2)字符常量占一个字节的内存空间。字符串常量在内存中存字符常量占一个字节的内存空间。
10、字符串常量在内存中存储时由系统自动在存储的所有字符尾部添加串结束标记储时由系统自动在存储的所有字符尾部添加串结束标记0,所以,字符串常量占的内存字节数等于字符串中字符所占所以,字符串常量占的内存字节数等于字符串中字符所占的字节数加的字节数加1。注意不要将单个字符组成的字符串常量与字符常量混淆。注意不要将单个字符组成的字符串常量与字符常量混淆。不能把一个字符串常量赋给一个字符变量。不能把一个字符串常量赋给一个字符变量。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.2 标识符、常量与变量标识符、常量与变量 5.符号常量符号常量 符号常量就是使用符号代表常量。符号常量就是使用符号代表常量
11、。C语言中允许用标识符定义一个常量,这种常量定语言中允许用标识符定义一个常量,这种常量定义在义在C语言中被称之为语言中被称之为“宏定义宏定义”。2.2.3 变量变量 一个变量有一个变量有3个相关的要素:个相关的要素:变量名;变量名;变量的存储单元;变量的存储单元;变量(存储单元存放)的值。变量(存储单元存放)的值。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.2 标识符、常量与变量标识符、常量与变量 1.变量的定义和赋值变量的定义和赋值 C语言要求程序中使用的每个变量都必须先定义,然后才语言要求程序中使用的每个变量都必须先定义,然后才能使用。定义变量需要用变量定义语句进行,其形式为
12、:能使用。定义变量需要用变量定义语句进行,其形式为:类型类型 变量名变量名=初值初值,变量名,变量名=初值初值,;例如:例如:int a;int x,y,min;int m,n=3,w=5;若对定义的多个变量赋相同的初值,不能采用连续赋初值若对定义的多个变量赋相同的初值,不能采用连续赋初值的形式,如的形式,如 int a=b=c=5,必须采用形式:,必须采用形式:int a=5,b=5,c=5。【注意【注意】除了不能用关键字做变量名外,可以用任何标识】除了不能用关键字做变量名外,可以用任何标识符作为变量名符作为变量名。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.2 标识符、常量与
13、变量标识符、常量与变量 2.整型数据的存储整型数据的存储 short int型补码为型补码为16位二进制数,它表示一个有符号整数,其位二进制数,它表示一个有符号整数,其特点是:当首位为特点是:当首位为0时表示一个正数,当首位为时表示一个正数,当首位为1时表示一个负时表示一个负数。正数的补码与其原码相同,而负数的补码为其对应的正数数。正数的补码与其原码相同,而负数的补码为其对应的正数的反码加的反码加1。如:。如:+4补补=0000 0000 0000 0100 -4补补=1111 1111 1111 1100 一个用补码表示的二进制数,最高位为符号位,当符号位为一个用补码表示的二进制数,最高位为
14、符号位,当符号位为“0”(即正数)时,其余位即为此数的二进制值;但当符号位为(即正数)时,其余位即为此数的二进制值;但当符号位为“1”(即负数)时,其余位不是此数的二进制值,应把它们按位求(即负数)时,其余位不是此数的二进制值,应把它们按位求反,且在最低位加反,且在最低位加1,才是它的二进制值。如:,才是它的二进制值。如:X补补=1111 1111 1111 1101则则X=-000 0000 0000 0011=-3 安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.2 标识符、常量与变量标识符、常量与变量 3.实型数据的存储实型数据的存储 实型数据是按指数形式存储的。以微机中存储实
15、型数据是按指数形式存储的。以微机中存储float型数据为型数据为例,例,float型数据在内存中占据型数据在内存中占据4个字节即个字节即32位二进制信息,位二进制信息,分别存放符号位、规格化的尾数、阶符位和阶码。分别存放符号位、规格化的尾数、阶符位和阶码。例如,实数例如,实数-32.28E-20-32.28E-20的存储情况如图所示。的存储情况如图所示。-0.322800-18 4.字符型数据的存储字符型数据的存储l 用一个字节(用一个字节(8 8位二进制信息)存储字符类型数据。对于无符位二进制信息)存储字符类型数据。对于无符号字符类型(号字符类型(unsigned charunsigned
16、char)数据直接存放)数据直接存放ASCIIASCII码或扩展码或扩展ASCIIASCII码。对于有符号字符类型(码。对于有符号字符类型(charchar)的数据也是用补码存)的数据也是用补码存储的。储的。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算2.3.1 算术运算算术运算1.基本算术运算符基本算术运算符 C语言规定:语言规定:(1)%运算符仅用于整型变量或整型常量的运算,运算符仅用于整型变量或整型常量的运算,a%b的结果为的结果为a除以除以b的余数,余数的符号与被除数相同。的余数,余数的符号与被除数相同。(2)+、-、*、/运算符的两个操作数既可以是整
17、数,也可以是实数。运算符的两个操作数既可以是整数,也可以是实数。当两个操作数均是整数时,结果仍是整数;若参加运算的两个当两个操作数均是整数时,结果仍是整数;若参加运算的两个操作数中有一个是实数,则结果为操作数中有一个是实数,则结果为double型。型。(3)当对两个整型的数据相除时结果为整数。但是如果除数或被除当对两个整型的数据相除时结果为整数。但是如果除数或被除数中有一个为负数,则舍入的方向是不固定的。如:数中有一个为负数,则舍入的方向是不固定的。如:-5/3在有在有的机器上得到结果的机器上得到结果-1,有的机器则给出结果,有的机器则给出结果-2。多数机器采取。多数机器采取“向零取整向零取整
18、”方法,即方法,即-5/3=-1,取整后向零靠拢。,取整后向零靠拢。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算2.算术表达式算术表达式(1)算术表达式定义算术表达式定义 由算术运算符、括号以及操作对象组成的符合由算术运算符、括号以及操作对象组成的符合C语言语法规语言语法规则的表达式称为算术表达式。如:则的表达式称为算术表达式。如:a+b-c/d*(a-c)。(2)优先级和结合性优先级和结合性 在表达式求值时,先按运算符的优先级别高低次序执行。若在表达式求值时,先按运算符的优先级别高低次序执行。若一个运算对象两侧的运算符的优先级别相同,如一个运算对象两侧的运算
19、符的优先级别相同,如a-b+c,则按,则按规定的规定的“结合方向结合方向”处理。处理。算术运算符的结合方向为算术运算符的结合方向为“自左至右自左至右”,又成为左结合性,又成为左结合性,即先左后右,因此即先左后右,因此b先与减号结合,执行先与减号结合,执行a-b的运算,再执行的运算,再执行加加c的运算。的运算。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算3.自自增、增、自自减减运运算算符符既既可可以以放放在在操操作作数数前前,也也可可以以放放在在操操作作数数后后,并并且且操操作作对对象象只只能能是是变变量量,不不能能是是常常量量或或表表达达式式。如如i+,i-/
20、*表表示示在在使使用用i值值之之后后将将i的的值值加加(减减)1*/+i,-i /*表表示示在在使使用用i值值之之前前将将i的的值值加加(减减)1*/例例如如:设设i的的原原值值为为5,则则执执行行下下面面的的赋赋倽倽语语句句:j=i+;(/*先先将将i的的值值赋赋给给j,i厍厍自自增增1,赋赋值值语语句句执执行行完完 后后i的的值值为为6,j的的值值为为5*/j=+i;/*先先将将i的的倬倬自自增增1,再再赋赋给给j,赋赋值值语语句句执执行行完完 后后i的的值值为为,j的的值值为为6*/安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算【注意【注意】(1)自增自减
21、运算符的优先级较高,和单目运算符相同。其结合自增自减运算符的优先级较高,和单目运算符相同。其结合方向是方向是“自右向左自右向左”(右结合性)。(右结合性)。考虑表达式考虑表达式-i+,由于,由于“-”和和“+”优先级相同,均为右结合优先级相同,均为右结合性,因此相当于性,因此相当于-(i+)。(2)尽管自增自减运算符给程序员带来了方便,但同时也带来了尽管自增自减运算符给程序员带来了方便,但同时也带来了副作用。副作用。例如,例如,“printf(%d,%dn,i,i+);”在不同的编译环境下结果在不同的编译环境下结果有可能不同。若有可能不同。若i的值为的值为3,则结果可能是,则结果可能是“3,3
22、”,也可能是,也可能是“4,3”。(3)C编译在处理时尽可能多地自左而右将若干个字符组成一个编译在处理时尽可能多地自左而右将若干个字符组成一个运算符(在处理标识符和关键字时也按同一原则处理),如运算符(在处理标识符和关键字时也按同一原则处理),如i+j,将解释为,将解释为(i+)+j,而不是,而不是i+(+j)。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算2.3.2 赋值运算1.赋值运算符赋值运算符 C语言中,赋值被认为是一种运算,由赋值运算符将语言中,赋值被认为是一种运算,由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达一个变量和一个表达式连接起
23、来的式子称为赋值表达式。其形式是:式。其形式是:赋值表达式的值也可以再赋给其它变量,如:赋值表达式的值也可以再赋给其它变量,如:a=(b=3+5)。【注意【注意】赋值运算符】赋值运算符“=”不同于数学中使用的符号,不同于数学中使用的符号,它没有它没有“相等相等”的含义。如果赋值运算符两侧的数据的含义。如果赋值运算符两侧的数据类型不同时,在赋值时要进行类型转换。类型不同时,在赋值时要进行类型转换。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算2.复合赋值运算符复合赋值运算符 C语言允许在赋值运算符语言允许在赋值运算符“=”之前加上其他运算符以构成之前加上其他运算符
24、以构成复合的赋值运算符。例如:复合的赋值运算符。例如:a+=5;等价于等价于a=a+5;a*=b+5;等价于等价于 a=a*(b+5);a%=5;等价于等价于 a=a%8;在在C语言中,可以使用的复合赋值运算符有:语言中,可以使用的复合赋值运算符有:+=,-=,*=,/=,%=,=,&=,=,|=3.运算符的优先级和结合性运算符的优先级和结合性 赋值运算符和复合赋值运算符的优先级相同,且都具有右赋值运算符和复合赋值运算符的优先级相同,且都具有右结合性。结合性。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算【例【例2-1】分析下面程序的运行结果】分析下面程序的运行
25、结果/*EX2-1.C */main()int a=12;a+=a-=a*a;printf(%d n,a);安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算2.3.3 位运算位运算 运算规则运算规则 安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算1.按位取反按位取反【格式【格式】x【例【例2-2】分析下面程序的运行结果】分析下面程序的运行结果/*EX2-2.C */main()unsigned char x=56,y;y=x;printf(%d n,y);其运算过程为:其运算过程为:56(00111000)56(00111000)1
26、99(11000111)安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算2.按位与按位与【格式【格式】x&y【例【例2-3】分析下面程序的运行结果】分析下面程序的运行结果main()unsigned char x=56,y=157,z;z=x&y;printf(%d n,z);其运算过程为:其运算过程为:56:00111000&157:10011101 0001100024 安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算3.按位或按位或【格式【格式】x|y【例【例2-4】分析下面程序的运行结果】分析下面程序的运行结果main()un
27、signed char x=56,y=157,z;z=x|y;printf(%d n,z);其运算过程为:其运算过程为:56:00111000|157:10011101 10111101189 安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算4.按位异或按位异或【格式【格式】x y【例【例2-5】分析下面程序的运行结果。】分析下面程序的运行结果。main()unsigned char x=56,y=157,z;z=xy;printf(%d n,z);其运算过程为:其运算过程为:56:00111000 157:1001110110100101165 安 庆 师 范
28、学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算5.左位移左位移【格式【格式】x要位移的位数要位移的位数【功能【功能】把操作对象的二进制数向左移动指定的位,并在】把操作对象的二进制数向左移动指定的位,并在右面补上相应的右面补上相应的0,高位溢出。,高位溢出。【示例【示例】如】如x=00001111,y=x2得00010100,即是81/4=20。负数高位补1的目的也是右移n位相当于对原来盄数值绝对值除以2n,而负号不变。嶂上例010501802得11110101,即是-44/4=-1。彆上述结论只适用于该数右移被溢出舍弃的低位中不包含1的情况,若包含1,右移n位相当于对原来皌数除
29、以2n后再取整(嶂81/4=20的例子);而对于负数,右移舍弃的低位使嶗补码减少一个小数,商的绝对值爙向增大的方琑取如:110100012得11110100,即-472得-12,而-47/4=-11 安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算【说明【说明】(1)复合赋值运算符复合赋值运算符 除按位取反运算外,其余除按位取反运算外,其余5个位运算符均可与赋值运算符个位运算符均可与赋值运算符一起,构成复合赋值运算符:一起,构成复合赋值运算符:&=、|+、=、=。(2)不同长度数据间的位运算不同长度数据间的位运算低字节对齐,短数的高字节低字节对齐,短数的高字节按最
30、高位补位:按最高位补位:对无符号数和有符号中的正数,补对无符号数和有符号中的正数,补0;有符号数中的负数,补有符号数中的负数,补1。2.3.4 逗号运算1.逗号运算符逗号运算符 其一般形式为:其一般形式为:表达式表达式1,表达式,表达式2 安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算 逗号表达式的求值过程是:先求表达式逗号表达式的求值过程是:先求表达式1的值,再求表达的值,再求表达式式2的值,表达式的值,表达式2的值就是整个逗号表达式的值。的值就是整个逗号表达式的值。一个逗号表达式可以与另一个表达式构成一个新的逗号表一个逗号表达式可以与另一个表达式构成一个新的
31、逗号表达式。达式。例如:例如:(a=5-3,a*5),a+15 逗号表达式的一般形式可以扩展为:逗号表达式的一般形式可以扩展为:表达式表达式1,表达式,表达式2,表达式,表达式3,表达式,表达式n2.运算符的优先级和结合性运算符的优先级和结合性 逗号运算符是所有运算符中级别最低的。逗号运算符是所有运算符中级别最低的。逗号表达式的结合性为自左向右的。逗号表达式的结合性为自左向右的。【注意【注意】并不是任何地方出现的逗号都是作为逗号运算符。】并不是任何地方出现的逗号都是作为逗号运算符。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.3 基本运算基本运算【例【例2-6】分析下面程序的运行结
32、果。】分析下面程序的运行结果。main()int a=5,b=6,c=1;printf(%d%dn,(+a,b+),c+2);安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.4 数据类型转换数据类型转换2.4.1 类型自动转换类型自动转换 转换规则转换规则 高高 double float long unsigned 低低 int char,short 图中横向向左的箭头表示必定的转换,纵向的箭头表示当图中横向向左的箭头表示必定的转换,纵向的箭头表示当运算对象为不同类型时转换的方向。运算对象为不同类型时转换的方向。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.4 数据类型转
33、换数据类型转换2.4.2 赋值类型转换赋值类型转换(1)当整型数据赋给浮点型变量时,数值上不发生任何变化,但当整型数据赋给浮点型变量时,数值上不发生任何变化,但有效位增加。有效位增加。(2)当单、双精度浮点型数据赋给整型变量时,浮点数的小数部当单、双精度浮点型数据赋给整型变量时,浮点数的小数部分将被舍弃。分将被舍弃。(3)将字符型数据赋给整型变量时,由于字符只占一个字节,而将字符型数据赋给整型变量时,由于字符只占一个字节,而整型变量为整型变量为4个字节,因此将字符数据(个字节,因此将字符数据(8位)放到整型变量位)放到整型变量低低8位中。位中。将将unsigned char型数据赋给型数据赋给
34、unsigned int或或int型变量时,型变量时,高高24位补位补0。将将char型数据赋给型数据赋给unsigned int或或int型变量时,若字符值型变量时,若字符值最高位为最高位为0,则高,则高24位补位补0;若字符值最高位为;若字符值最高位为1,则高,则高24位全补位全补1。安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.4 数据类型转换数据类型转换【例【例2-7】分析下面程序的运行结果。】分析下面程序的运行结果。main()unsigned char a;char b;unsigned int x;int y;a=0 xfe;x=a;y=a;printf(%x%xn,
35、x,y);b=0 x7e;x=b;y=b;printf(%x%xn,x,y);b=0 xfe;x=b;y=b;printf(%x%xn,x,y);安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.4 数据类型转换数据类型转换(4)当长度长的整型数据赋给长度短的变量时,将进行截断赋值。当长度长的整型数据赋给长度短的变量时,将进行截断赋值。【例【例2-8】分析下面程序的运行结果。】分析下面程序的运行结果。/*EX2-8.C */main()unsigned short a;short b;unsigned long x;x=0 x6a8b5cfd;a=x;b=x;printf(%x%xn,
36、a,b);安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.4 数据类型转换数据类型转换(5)当整型数据赋给长度相同的变量时,将进行原样赋值。当整型数据赋给长度相同的变量时,将进行原样赋值。【例【例2-9】分析下面程序的运行结果。】分析下面程序的运行结果。/*EX2-9.C */main()unsigned int a;int b;a=0 xffff;b=a;printf(%x%xn,a,b);安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.4 数据类型转换数据类型转换2.4.3 强制类型转换强制类型转换 强制类型转换的一般形式为:强制类型转换的一般形式为:(类型名类型名)(
37、表达式表达式)【注意【注意】(1)表达式应该用括号括起来。表达式应该用括号括起来。(2)经强制类型转换后,得到的是一个所需类型的中间变量,经强制类型转换后,得到的是一个所需类型的中间变量,原来变量的类型并没有发生任何变化。原来变量的类型并没有发生任何变化。【例【例2-10】分析下面程序的运行结果。】分析下面程序的运行结果。main()int a;float b=3.5;a=(int)b;printf(a=%d,b=%fn,a,b);安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.5 程序举例程序举例 【例【例2-11】分析下面程序的运行结果。】分析下面程序的运行结果。/*EX2-11
38、.C */main()int x,y;x=40;y=(x=x-4,x%7);printf(y=%dn,y);安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.5 程序举例程序举例 【例【例2-12】分析下面程序的运行结果。】分析下面程序的运行结果。/*EX2-12.C */main()int m,n,k;m=3;n=9;k=(+m)+(-n);printf(m=%d,n=%d,k=%dn,m,n,k);m=3,n=9;k=(m-)+(n+);printf(m=%d,n=%d,k=%dn,m,n,k);安 庆 师 范 学 院 计 算 机 与 信 息 学 院2.5 程序举例程序举例 【例【例2-13】取一个整数】取一个整数x从右端开始的从右端开始的47位。位。【分析【分析】(1)先使先使x右移右移4位,目的是使要取出的那几位移到最右端。位,目的是使要取出的那几位移到最右端。右移到右端可以用下面方法实现:右移到右端可以用下面方法实现:x 4(2)设置一个低设置一个低4位全为位全为1,其余全为,其余全为0的数。的数。可用下面方法实现:可用下面方法实现:(0 4)&(04;n=(04);k=m&n;printf(%x,%dn%x,%dn,m,m,k,k);安 庆 师 范 学 院 计 算 机 与 信 息 学 院