




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据类型、运算符、与表达式数据类型、运算符、与表达式q数据类型数据类型q常量与变量常量与变量q不同类型数据间的转换不同类型数据间的转换q运算符和表达式运算符和表达式c的数据类型的数据类型C C数数据据类类型型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型void定义类型定义类型 typedef字符类型字符类型 char枚举类型枚举类型enum整型整型实型实型单精度型单精度型 float双精度型双精度型 double数组数组结构体结构体struct共用体共用体union短整型短整型 short长整型长整型 long整型整型 int数据类型决定:数据类型决定:1. 数据占内存字节数数
2、据占内存字节数2. 数据取值范围数据取值范围3. 其上可进行的操作其上可进行的操作基本数据类型基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-3276832767(signed)short16-3276832767(signed)long32-2147483648214748364716unsigned int0655353204294967295unsigned longunsigned short16065535有float323.4e-383.4e38有double641.7e-3081.7e308有char8-128127无unsigned
3、char80255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例:常量与变量常量与变量q 标识符标识符定义:用来标识变量、常量、函数等的字符序列定义:用来标识变量、常量、函数等的字符序列组成:组成:只能由只能由字母字母、数字数字、下划线下划线组成,且第一个字母必须组成,且第一个字母必须是字母或下划线是字母或下划线大小写敏感大小写敏感不能使用关键字不能使用关键字 长度:最长长度:最长32个字符个字符 命名原则:命名原则:见名知意见名知意不宜混淆不宜混淆 如如l与与I, o与与0例:判断下列标识符号合法性sum Sum M.D.John day Date 3days stu
4、dent_name #33 lotus_1_2_3 char ab _above $123M.D.John3days#33char$123ab常量与变量常量与变量一般用大写字母一般用大写字母是宏定义预处理命令,不是是宏定义预处理命令,不是C语句语句直接常量直接常量: :整型常量整型常量 实型常量实型常量 字符常量字符常量 字符串常量字符串常量如 #define PRICE 30 q常量常量定义:程序运行时其值不能改变的量(即常数)定义:程序运行时其值不能改变的量(即常数)分类分类: :符号常量符号常量: :用标识符代表常量用标识符代表常量定义格式:定义格式: # #definedefine 符
5、号常量符号常量 常量常量例 符号常量举例(ch3_1.c)#define PRICE 30main() int num,total; num=10; total=num*PRICE; printf(total=%d,total);运行结果:total=300常量与变量常量与变量q使用符号常量使用符号常量含义清楚含义清楚一改全改一改全改常量与变量常量与变量编译程序根据变量定义为其分配指定字节的内存单元.地址int a=1, b=-3,c;abc2字节2字节2字节地址地址.内存1-3随机数q变量变量概念:其值可以改变的量概念:其值可以改变的量 变量名变量名与与变量值变量值 变量定义的一般格式:变量
6、定义的一般格式: 数据类型数据类型 变量变量1,变量,变量2,变量,变量n; 变量初始化变量初始化:定义时赋初值定义时赋初值 例: int a,b,c; float data;决定分配字节数和数的表示范围合法标识符例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1; 变量的使用:变量的使用:先定义,后使用先定义,后使用例1 int student; statent=19; /Undefined symbol statent in function main 例2 float a,b,c; c=a%
7、b; /illegal use of floating point in function main 变量定义位置:变量定义位置:一般一般放在函数开头放在函数开头main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);变量定义可执行语句main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data);常量与变量常量与变量q变量的变量的“先定义,后使用先定义,后使用”凡未被事先定义的,不作为变量名凡未被事先定义的,不作为
8、变量名每一个变量被指定为一确定类型,在编译时候就可以每一个变量被指定为一确定类型,在编译时候就可以 为其分配相应的存储空间为其分配相应的存储空间便于在编译时候,检查该变量所进行的运算是否合法便于在编译时候,检查该变量所进行的运算是否合法整型数据整型数据q整型常量(整常数)整型常量(整常数) 三种形式:三种形式:十进制整数:由数字十进制整数:由数字0 09 9和正负号表示和正负号表示. .如如 123,-123,-456,0456,0八进制整数:由数字八进制整数:由数字0 0开头开头, ,后跟数字后跟数字0 07 7表示表示. .如如0123,0110123,011十六进制整数:由十六进制整数:
9、由0 0 x x开头开头, ,后跟后跟0 09,9,a af,Af,AF F表示表示. . 如如0 0 x123,0Xffx123,0Xff例 12 与 12L例 30000 为int型 65536 为long int 型 整型常量的类型整型常量的类型根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型在整常量后加字母在整常量后加字母l l或或L L,认为它是,认为它是long int 型常型常量量问题:0123 = ( )100 x123 = ( )100Xff = ( )1083291255问题:0123 = ( )100 x123 = ( )100Xff = ( )10整型数据整
10、型数据q整型数据在内存中的存放形式整型数据在内存中的存放形式q整型变量的分类整型变量的分类q整型变量的定义整型变量的定义q整型数据的溢出整型数据的溢出整型数据在内存中的存放形式整型数据在内存中的存放形式q在内存中以二进制形式存放在内存中以二进制形式存放 int i; i = 10;1010i i在内存中的表示:在内存中的表示:示意图0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0在内存中的实际存放情况实际上,数值是以补码表示的实际上,数值是以补码表示的整数的补码是本身整数的补码是本身负数的补码是绝对值的二进制变反加一负
11、数的补码是绝对值的二进制变反加一考虑表示考虑表示-10-10的示意图及在内存中的存放情况?的示意图及在内存中的存放情况?整型变量的分类整型变量的分类q整型变量的基本类型为整型变量的基本类型为int。q根据数值范围可定义为:根据数值范围可定义为:基本整型基本整型、短整型短整型、长整型长整型q对以上三类可以加修饰符对以上三类可以加修饰符:signed或者或者unsigned现在有几种整型变量了?现在有几种整型变量了?有符号基本整型:有符号基本整型:signed intsigned int无符号基本整型:无符号基本整型:unsigned intunsigned int有符号短整型:有符号短整型:si
12、gned short intsigned short int无符号短整型:无符号短整型: unsigned short intunsigned short int有符号长整型:有符号长整型:signed long intsigned long int无符号长整型:无符号长整型: unsigned long intunsigned long intq所占内存,由各计算机系统自己决定,一般占一个所占内存,由各计算机系统自己决定,一般占一个机器字。机器字。q shortintlong0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
13、 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1有符号整型第1位是符号位无符号整型第1位是数据位整型变量的定义整型变量的定义qC规定在程序中所有用到的变量都必须在程序中定规定在程序中所有用到的变量都必须在程序中定义,即义,即“强制类型定义强制类型定义”。q定义一般放在一个函数的开头部分。定义一般放在一个函数的开头部分。main() main() int a,b,c,d; int a,b,c,d; unsigned u; unsigned u; a=12; b=-24; u=10; a=12; b=-24; u
14、=10; c=a+u; d=b+u; c=a+u; d=b+u; printf(a+u=%d,b+u=%dn,c,d); printf(a+u=%d,b+u=%dn,c,d); 运行结果:运行结果:a+u=22,b+u=-14a+u=22,b+u=-14整型变量的溢出整型变量的溢出q一个一个int型变量的最大允许值为型变量的最大允许值为32767,加,加1后如何?后如何?例例3.3 3.3 整型数据的溢出整型数据的溢出#include #include main()main() int a,b; int a,b; a=32767; a=32767; b=a+1; b=a+1; printf(%
15、d,%d,a,b); printf(%d,%d,a,b); 运行结果:运行结果:32767,-3276832767,-32768进一步进一步 若若a=-32768a=-32768,b=a-1;b=a-1;则结果为则结果为-32768,32767-32768,327670 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 132767327671 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-32768-32768其原因在于:其原因在于:q以补码表示
16、以补码表示1.1.有符号位有符号位实型数据实型数据q 实型常量的表示方法实型常量的表示方法q 实型变量实型变量q 实型常量的类型实型常量的类型实型常量的表示方法实型常量的表示方法实数又称浮点数,有两种表示方法:实数又称浮点数,有两种表示方法:q 十进制小数形式。十进制小数形式。它由数字和小数点组成它由数字和小数点组成( (注意必须有小数点注意必须有小数点) )。如如.123.123、123.123.、123.0123.0、0.00.0等。等。q 指数形式。指数形式。如如123e3123e3或或123E3123E3都代表都代表123123* *103103。但。但注意字母注意字母e e或或E E
17、之之前必须有数字,且前必须有数字,且e e后面的指数必须为整数。后面的指数必须为整数。 如如e3e3、2.1e3.52.1e3.5、.e3.e3、e e等都是不合法的指数形式。等都是不合法的指数形式。“规范化的指数形式规范化的指数形式”一个实数可以有多种指数表示形式。例如一个实数可以有多种指数表示形式。例如123.456123.456可以表示为可以表示为123.456e0123.456e0、12.3456e112.3456e1、1.23456e21.23456e2、0.123456e30.123456e3等。把其中等。把其中的的1.23456e21.23456e2称为称为“规范化的指数形式规范
18、化的指数形式”,即在字母,即在字母e(e(或或E)E)之之前的小数部分中,小数点左边应有一位前的小数部分中,小数点左边应有一位( (且只能有一位且只能有一位) )非零非零的数字,的数字,实型变量实型变量q实型变量的分类实型变量的分类floatfloat:占:占4 4字节,提供字节,提供7 7位有效数字位有效数字doubledouble:占:占8 8字节,提供字节,提供15161516位有效数字位有效数字long double long double 占占1616字节,提供字节,提供18191819位有效数字位有效数字( (不常用不常用) )float a; float a; a=111111.
19、111; /a=111111.111; /* * a=111111.1 a=111111.1* */ /double b;double b;b=111111.111; /b=111111.111; /* * b=111111.111 b=111111.111* */ /实型变量实型变量q实型数据在内存中的存放形式实型数据在内存中的存放形式看一看实数看一看实数3.141593.14159在内存中存放的示意图在内存中存放的示意图+ +.314159.3141591 1数符小数部分指数部分实型变量实型变量q实型变量的舍入误差实型变量的舍入误差由于实型变量是用有限的存储单元存储的,因此能提供的由于实型
20、变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效数字以外的数字将被舍去。有效数字总是有限的,在有效数字以外的数字将被舍去。提示提示 应该避免将一个很大的数和一个很小的数直应该避免将一个很大的数和一个很小的数直接相加或相减,否则会丢失小的数。接相加或相减,否则会丢失小的数。 例例3.4 3.4 实型数据的舍入误差。实型数据的舍入误差。main()main() float a,b; float a,b; a=123456.789e5; a=123456.789e5; b=a+20; b=a+20; printf(%f,b); printf(%f,b); 修改:将修改:将floa
21、tfloat改为改为doubledouble,结果为结果为12345678920.00000012345678920.000000 理论结果:理论结果:1234567892012345678920运行结果:运行结果:12345678848.00000012345678848.000000原因:一个实型变量只能保证原因:一个实型变量只能保证的有效数字是的有效数字是7 7位,后面的数位,后面的数字是无意义的。字是无意义的。实型常量的类型实型常量的类型q默认默认double型型q在实型常量后加字母在实型常量后加字母f或或F ,认为它是,认为它是float 型型字符型数据字符型数据q字符常量字符常量q
22、字符变量字符变量q字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法q字符串常量字符串常量字符常量字符常量q定义定义: :用单引号括起来的单个普通字符或用单引号括起来的单个普通字符或转义字符转义字符. q字符常量的值:该字符的字符常量的值:该字符的ASCIIASCII码码值值转义字符及其含义:转义字符及其含义:转义字符含义nvradddtbf“xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如 101 -A 012 -n 376 - x61 -a 60 -0 483 -()例:A-101-x41-6
23、5如 A65, a97, 048 , n10如 a A ? n 101q转义字符转义字符: :反斜线后面跟一个字符或一个代码值表示反斜线后面跟一个字符或一个代码值表示例 转义字符举例main() printf(101 x42 Cn); printf(I say:How are you?n); printf(C Programn); printf(Turbo C);运行结果:(屏幕显示)A B CIsay:”How are you?”C ProgramTurbo C例 main() printf(“Yb=n”); 运行结果:屏幕显示:=打印机输出:字符变量字符变量q定义形式:定义形式:char
24、变量名;变量名;q只能存放一个字符只能存放一个字符说明说明 在所有的编译系统中都规定了以一个字节来存在所有的编译系统中都规定了以一个字节来存放一个字符,或者说一个字符变量在内存中占放一个字符,或者说一个字符变量在内存中占一个字节。一个字节。在内存中的存储形式及其使用方法在内存中的存储形式及其使用方法 q字符变量存放字符字符变量存放字符ASCIIASCII码码qcharchar与与intint数据间可进行算术运算数据间可进行算术运算 a=D; / a=D; /* * a=68; a=68; * */ / x=A+5; / x=A+5; /* * x=65+5; x=65+5; * */ / s=
25、!+G / s=!+G /* * s=33+71; s=33+71; * */ /main()main() char c1, c2; char c1, c2; c1 = 97; c1 = 97; / /* * 等价于等价于c1=a c1=a * */ / c2 = 98; c2 = 98; / /* * 等价于等价于c1=b c1=b * */ / printf(“%c %cn”,c1,c2); / printf(“%c %cn”,c1,c2); /* * 输出结果输出结果 a b a b * */ / printf(“%d %dn”,c1,c2); printf(“%d %dn”,c1,c2
26、); / /* * 输出结果输出结果 97 98 97 98 * */ / q没有字符串变量,用字符数组存放没有字符串变量,用字符数组存放q字符型数据和整型数据既可以用字符型数据和整型数据既可以用 %c%c也可用也可用%d%dq字符数据占一个字节,只能存放字符数据占一个字节,只能存放0-2550-255内的整数内的整数q若将字符变量中的最高位作符号位,取值范围若将字符变量中的最高位作符号位,取值范围是是-128-128127127。如果使用。如果使用ASCIIASCII码码128255128255间的字间的字符,用符,用%d%d格式输出时,就会得到一个负整数。格式输出时,就会得到一个负整数。如
27、果不想按有符号处理,可改为如果不想按有符号处理,可改为unsigned charunsigned char类型,这时其取值范围为类型,这时其取值范围为0 0255255。字符串常量字符串常量q定义:用双引号定义:用双引号(“”)(“”)括起来的字符序列括起来的字符序列符常符常量量q存储:每个字符串尾存储:每个字符串尾自动自动加一个加一个 00 作为作为字字 符串结束标志符串结束标志h e l l o 0例 字符串“hello”在内存中a a 0例 a“a”例 空串 “”0例: char ch; ch=“A”; 例: char ch; ch=A; q字符常量与字符串常量不同字符常量与字符串常量不
28、同字符串常量字符串常量q00用来判断字符串是否结束。是一个用来判断字符串是否结束。是一个ASCIIASCII码为码为0 0的字符,是的字符,是“空操作字符空操作字符”,它不引起任何控制动,它不引起任何控制动作,也不是一个可显示的字符。作,也不是一个可显示的字符。C CH HI IN NA A00q从技术角度看,字符串常量就是字符数组。从技术角度看,字符串常量就是字符数组。变量赋初值变量赋初值q先定义,后赋值先定义,后赋值int a,b;int a,b;a = 3;a = 3;q定义的同时赋值定义的同时赋值int a = 3;int a = 3;q被定义的一部分变量赋值被定义的一部分变量赋值in
29、t aint a,b b,c = 5;c = 5;int a = 3,char b = a; int a = 3,char b = a; 这样书写格式正确否?为什么?这样书写格式正确否?为什么?各类数值型数据间的混合运算各类数值型数据间的混合运算doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换例 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledouble
30、doubledoubledouble10+a +i*f - d/l例 int i; float f; double d; long l;算术运算符和算术表达式算术运算符和算术表达式qC运算符运算符q算术运算符和算术表达式算术运算符和算术表达式C运算符简介运算符简介C运算符算术运算符:(+ - * / % + -)关系运算符:( = !=)逻辑运算符:(! & |)位运算符 :( | &)赋值运算符:(= 及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(* &)求字节数 :(sizeof)强制类型转换:(类型)分量运算符:(. -)下标运算符:()其它 :(
31、( ) -)C运算符简介运算符简介q字符字符学习运算符应注意:学习运算符应注意:运算符功能运算符功能与运算量关系与运算量关系要求运算量个数要求运算量个数要求运算量类型要求运算量类型运算符优先级别运算符优先级别结合方向结合方向结果的类型结果的类型常量常量算术运算符和算术表达式算术运算符和算术表达式q基本的算术运算符基本的算术运算符q算术表达式和算术运算符的优先级与结合性算术表达式和算术运算符的优先级与结合性q强制类型转换运算符强制类型转换运算符q自增、自减运算符自增、自减运算符q有关表达式中的问题说明有关表达式中的问题说明基本的算术运算符基本的算术运算符q求余运算符,两侧必须是整数求余运算符,两
32、侧必须是整数 q两个整数相除的结果为整数,如两个整数相除的结果为整数,如5/35/3的值为的值为1 1。如。如- -5/35/3的结果可能为的结果可能为-2-2或或-1-1。多数机器采用。多数机器采用“向零取整向零取整”的方法,为的方法,为-1-1,取整后向零靠拢,取整后向零靠拢q+,-,*,/中中 有一个数是实数,结果为有一个数是实数,结果为double型型+,- , *,/, %5/2 = 5/-2 = -5/2.0 = 5/-2.0 = 5%2 = -5%2 = 5%-2 = -5%-2 = 1%10 = 5%1 = 5.5%22-2-2.5-2.51-11-110算术表达式和运算符的优
33、先级与结合性算术表达式和运算符的优先级与结合性q算术表达式:算术表达式:用算术运算符和括号将运算对象用算术运算符和括号将运算对象( (也称操作数也称操作数) )连接起来的、连接起来的、符合符合C C语法规则的式子。运算对象包括常量、变量、函数等。语法规则的式子。运算对象包括常量、变量、函数等。 q优先级:优先级:- - * * / % / % + -+ -q算术运算符的结合方向为算术运算符的结合方向为“自左向右自左向右”,即左结合,即左结合性。性。q赋值运算符的结合方向为赋值运算符的结合方向为“自右向左自右向左”,即右结合,即右结合性。性。强制类型转换符强制类型转换符q强制转换,显示转换强制转
34、换,显示转换q一般形式:一般形式:(类型名)(表达式)(类型名)(表达式)例例 (int)(x+y)(int)(x+y) (int)x+y (int)x+y (double)(3/2) (double)(3/2) (int)3.6 (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变说明:强制转换得到所需类型的中间变量,原变量类型不变例例 main()main() float x; float x; int i; int i; x=3.6; x=3.6; i=(int)x; i=(int)x; printf(“x=%f,i=%d”,x,i); printf(“x=%f,i=%
35、d”,x,i); 结果:结果:x=3.600000,i=3x=3.600000,i=3精度损失问题较高类型向较低类型转换时可能发生自增、自减运算符自增、自减运算符: +,-作用:使变量值加作用:使变量值加1 1或减或减1 1种类:种类:前置前置 +i, -i ( +i, -i (先执行先执行i i+1+1或或i-1i-1,再使用,再使用i i值)值)后置后置 i+,i- ( i+,i- (先使用先使用i i值值, ,再执行再执行i i+1+1或或i-1i-1)说明:说明:+ - + - 不能用于常量和表达式不能用于常量和表达式, ,如如5+5+,(a+b)+(a+b)+ -+ -结合方向:结合
36、方向: 自右向左自右向左优先级:优先级: + + - - - - * * / % - / % - - - + - + - 例 -i+ -(i+) i=3; printf(“%d”,-i+); /-3 例 j+k; (j+)+k;例 -i+ i=3; printf(“%d”,-i+); 自增、自减运算符自增、自减运算符: +,-q例子例子 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b; /k=4,j=4/k=4,j=4/k=3,j=4/k=3
37、,j=4/4/4/3/3/c=20,a=4/c=20,a=4/c=15,a=4/c=15,a=4令令i=3.i=3.S=S=(i+i+)+(i+)+(i+)+(i+)+(i+)S=S=(i+i+)+(+i)+(i+)+(+i)+(i+)S=S=(+i+i)+(i+)+(+i)+(i+)+(+i)/s=9,j=6/s=9,j=6/s=12,j=6/s=12,j=6/s=15,j=6/s=15,j=6有关表达式中的问题说明有关表达式中的问题说明qANSI CANSI C没有具体规定表达式中的子表达式的求值顺没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自行安排。序,允许各编译系统自行安排
38、。q应该尽量避免出现这种歧义性应该尽量避免出现这种歧义性 qC C编译系统在处理运算顺序时,尽可能多地编译系统在处理运算顺序时,尽可能多地( (自左向自左向右右) )将若干字符组成一个运算符将若干字符组成一个运算符q形如:形如: i=3;printf(“%d,%d”,i,i+);i=3;printf(“%d,%d”,i,i+); 最好改写成:最好改写成:i=3;i=3; j=i+; j=i+; printf( printf(“%d,%d%d,%d”,i,j);,i,j); 赋值预算符和赋值表达式赋值预算符和赋值表达式q赋值运算符赋值运算符q类型转换类型转换q复合的赋值运算符复合的赋值运算符q赋
39、值表达式赋值表达式符号:符号: = =格式:格式: 变量标识符变量标识符= =表达式表达式作用:作用: 将一个数据(常量或表达式)赋给一个变量将一个数据(常量或表达式)赋给一个变量例 a=3; d=func(); c=d+2;类型转换类型转换q 如果赋值运算符两侧的类型不一致,但都是数值型或字符型,如果赋值运算符两侧的类型不一致,但都是数值型或字符型,在赋值时要进行类型转换。在赋值时要进行类型转换。 q 原则:原则:按存储单元中的存储形式直接传送按存储单元中的存储形式直接传送。 1.float1.float、doubledouble赋给赋给intint型变量时,舍弃实数的小数部分。型变量时,舍
40、弃实数的小数部分。如如i=3.56i=3.56,则,则i i为为3 3。 如:如:2323赋给赋给floatfloat变量变量f,f,则则f f为为23.0000023.000002.型赋给型赋给floatfloat、doubledouble型变量,数值不变,以浮点数形式存储。型变量,数值不变,以浮点数形式存储。3. double3. double型赋给型赋给floatfloat型变量时,截取其前面型变量时,截取其前面7 7位有效数字。位有效数字。 但应注意数值不能溢出。但应注意数值不能溢出。float f; float f; double d=123.456789e100;d
41、ouble d=123.456789e100;f=d; f=d; 溢出错误溢出错误将一个将一个floatfloat型数据赋给型数据赋给doubledouble型变量时,数值不变,有效位扩大。型变量时,数值不变,有效位扩大。 4.char4.char型赋给型赋给intint型变量时,将字符数据型变量时,将字符数据(8(8位位) )放到整型变量低放到整型变量低8 8位中位中, , 有两种情况:有两种情况: (1)(1)所用系统将字符处理为无符号的,则高所用系统将字符处理为无符号的,则高8 8位补零。位补零。(2)(2)所用系统将字符处理为有符号的,若字符所用系统将字符处理为有符号的,若字符最高位为
42、最高位为0 0,则高,则高8 8位补零;若为位补零;若为1 1,高,高8 8位补位补1 1。这称为符号扩展,这称为符号扩展, 类型转换类型转换5. 5. intint、shortshort、longlong型赋给型赋给charchar型变量时,截取低型变量时,截取低8 8位。位。 int i=289;int i=289;char c=a;char c=a;c=i;c=i;c c的值为的值为3333 int a;int a; long b=8; long b=8; a=b; / a=b; /* * a a为为8 8 * */ / 6. 6. signed intsigned int型赋给型赋给l
43、onglong型变量时,将型变量时,将intint的的1616位赋给位赋给longlong的低的低1616位,位,同时要进行符号扩展。如果赋值数据为正值,则同时要进行符号扩展。如果赋值数据为正值,则longlong型变量的高型变量的高1616位补位补0 0;否则高否则高1616位补位补1 1。反之,反之,longlong型赋给型赋给intint型变量,截取低型变量,截取低1616位。位。 7. 7. unsigned intunsigned int型赋给型赋给long intlong int型变量时,型变量时,将将intint的的1616位赋给位赋给longlong的低的低1616位,将高位,
44、将高1616位补位补0 0。 unsigned int a=65535;unsigned int a=65535;int b;int b;b=a; /b=a; /* * b b为为-1 -1 * */ /8.8.非非unsignedunsigned型数据赋给长度相同的型数据赋给长度相同的unsignedunsigned型变量时,原样照赋。型变量时,原样照赋。 int a;int a; long b=65536; long b=65536; a=b; / a=b; /* * a a为为0 0 * */ / main()main() unsigned a;unsigned a;int b=-1;i
45、nt b=-1;a=b;a=b;printf(%u,a); /printf(%u,a); /* * 65535 65535 * */ / 复合的赋值运算符复合的赋值运算符q种类:种类:+=,-=,*= ,/=,%=,=, &=, =, |=q说明:说明:C C采用这种复合运算符,一是为了简化程序,使程序采用这种复合运算符,一是为了简化程序,使程序精炼;二是为了提高便以效率。精炼;二是为了提高便以效率。( (这样写法与这样写法与“逆波兰式逆波兰式”一致,有利于编译,能产生质量较高的目标代码。学过编译一致,有利于编译,能产生质量较高的目标代码。学过编译原理得同学对此容易理解。原理得同学对此
46、容易理解。) )逆波兰式逆波兰式逆波兰式定义逆波兰式定义 将运算对象写在前面,而把运算符号将运算对象写在前面,而把运算符号写在后面。写在后面。用这种表示法表示的表达式也称做后缀式。用这种表示法表示的表达式也称做后缀式。逆波兰式的特点在于逆波兰式的特点在于运算对象顺序不变,运算符号位运算对象顺序不变,运算符号位置反映运算顺序。置反映运算顺序。采用逆波兰式采用逆波兰式可以很好的表示简单可以很好的表示简单算术表达式算术表达式,其优点在于,其优点在于易于计算机处理表达式易于计算机处理表达式。赋值表达式赋值表达式q由赋值运算符将一个变量和一个表达式连接起来的由赋值运算符将一个变量和一个表达式连接起来的式
47、子称为式子称为赋值表达式赋值表达式 q q求解过程:求解过程:将赋值运算符右侧的将赋值运算符右侧的“表达式表达式”的值赋给左侧的值赋给左侧的变量。的变量。 a=(b=5)a=(b=5)可以写成可以写成a=b=5a=b=5a=b=c=5a=b=c=5赋值表达式值为赋值表达式值为5 5,a a、b b、c c均等于均等于5 5a=5+(c=6)a=5+(c=6)表达式值为表达式值为1111,a a等于等于1111,c c等于等于6 6a=(b=4)+(c=6)a=(b=4)+(c=6)表达式值为表达式值为1010,a a等于等于1010,b b等于等于4, c4, c等于等于6 6a=(b=10)/(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 脚手架专题-基本知识
- 一体式空气净化处理装置产品介绍
- “四位一体”综合防突措施
- 安全生产责任制文化建设与实践案例分享
- 2025至2030年电容器容量损耗多路测试分选仪项目投资价值分析报告
- 安全技术与装备更新
- 2025至2030年滤扇项目投资价值分析报告
- 中学语文汉字书写规范
- 工业涂料项目可行性研究报告
- 2025至2030年无毒耐候环氧防水防蚀涂料项目投资价值分析报告
- 江苏省徐州市树恩中学2024-2025学年高一下学期第一次月考地理试题(含答案)
- 汽车行业发展前景
- 用电知识安全培训课件
- 档案数字化管理试题及答案
- 2025届广东省佛山市高三上学期一模生物试题含答案
- 2.2城镇化课件高中地理人教版(2019)必修二
- 2025年3月版安全环境职业健康法律法规标准文件清单
- 2024-2025学年历史统编版七年级下册期末评估测试卷 (含答案)
- 2025年河南交通职业技术学院单招职业技能测试题库审定版
- 政府审计 课件汇 蒋秋菊 第5-12章 金融审计- 政府审计报告
- 2025年南阳科技职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
评论
0/150
提交评论