版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第二章第二章 数据类型和表达式数据类型和表达式2.1 C+的数据类型的数据类型2.2 常量常量2.3 变量变量2.4 C+的运算符的运算符2.5 算术运算符与算术表达式算术运算符与算术表达式2.6 赋值运算符与赋值表达式赋值运算符与赋值表达式2.7 逗号运算符与逗号表达式逗号运算符与逗号表达式22.1 C+的数据类型的数据类型l计算机处理的对象是数据计算机处理的对象是数据,而数据是以某种特定的而数据是以某种特定的形式存在的形式存在的(例如整数例如整数 浮点数浮点数 字符等形式字符等形式) 不同的数据之间往往还存在某些联系不同的数据之间往往还存在某些联系(例如由若例如由若干个整数组成一个整数数
2、组干个整数组成一个整数数组) 345l说明说明:l(1) 整型数据分为长整型整型数据分为长整型(long int) 一般整型一般整型(int) 和短整型和短整型(short int) 在在int前面加前面加long和和short分别分别表示长整型和短整型表示长整型和短整型 l(2) 整型数据的存储方式为按二进制数形式存储整型数据的存储方式为按二进制数形式存储,例如例如十进制整数十进制整数85的二进制形式为的二进制形式为1010101,则在内存中则在内存中的存储形式如图所示的存储形式如图所示 6l(3) 在整型符号在整型符号int和字符型符号和字符型符号char的前面的前面,可以可以加修饰符加修
3、饰符signed(表示表示“有符号有符号”)或或unsigned(表示表示“无符号无符号”) l如果指定为如果指定为signed,则存储单元中的最高位则存储单元中的最高位(bit)用用来表示数值的符号来表示数值的符号 l如果指定为如果指定为unsigned,则数值没有符号则数值没有符号,全部二进全部二进制位都用来表示数值本身制位都用来表示数值本身 7l例如短整型数据占两个字节例如短整型数据占两个字节 。l有符号时有符号时,能存储的最大值能存储的最大值32767,最小值为最小值为-32768 无符号时无符号时,能存储的最大值为能存储的最大值为65535,最小值为最小值为0 有些有些数据是没有负值
4、的数据是没有负值的,可以使用可以使用unsigned,它存储正数的它存储正数的范围比用范围比用signed时要大一倍时要大一倍 8l(4) 浮点型浮点型(又称实型又称实型)数据分为单精度数据分为单精度(float) 双精度双精度(double)和长双精度和长双精度(long double)3种种,在在Visual C+ 6.0中中,对对float提供提供6位有效数字位有效数字,对对double提供提供15位有效数字位有效数字,并且并且float和和double的数的数值范围不同值范围不同 对对float分配分配4个字节个字节,对对double和和long double分配分配8个字节个字节 l
5、(5) 表中类型标识符一栏中表中类型标识符一栏中,方括号方括号 包含的部分可包含的部分可以省写以省写,如如short和和short int等效等效,unsigned int和和unsigned等效等效 92.2 常量常量l2.2.1 什么是常量什么是常量在程序运行过程中,其值一直保持不变的量为常量。在程序运行过程中,其值一直保持不变的量为常量。一般从其字面形式即可判别是否为常量一般从其字面形式即可判别是否为常量 常量包括两大类常量包括两大类,即数值型常量即数值型常量(即常数即常数)和字符型常量和字符型常量 如如12,0,-3为整型常量为整型常量,4.6,-1.23为实型常量为实型常量,包含在包
6、含在两个单撇号之间的字符为字符常量两个单撇号之间的字符为字符常量,如如a,x 这种从这种从字面形式即可识别的常量称为字面形式即可识别的常量称为“字面常量字面常量”或或“直接直接常量常量” l2.2.2 数值常量数值常量10l1. 整型常量整型常量(整数整数)的类型的类型l整型数据可分为整型数据可分为int,short int,long int以及以及unsigned int,unsigned short,unsigned long等类别等类别 整型常量也分为以上类别整型常量也分为以上类别 区分一个整型常量类别的方法:区分一个整型常量类别的方法:(1) 一个整数一个整数,如果其值在如果其值在-3
7、2768+32767范围内范围内,认为它认为它是是short int型型,它可以赋值给它可以赋值给short int型型 int型和型和long int型变量型变量 (2) 一个整数一个整数,如果其值超过了上述范围如果其值超过了上述范围,而在而在-2147483648+2147483647范围内范围内,则认为它是则认为它是long int型型,可以将它赋值给一个可以将它赋值给一个int或或long int型变量型变量 11l(3) 如果某一计算机系统的如果某一计算机系统的C+版本版本(例如例如Visual C+)确定确定int与与long int型数据在内存中占据的长度型数据在内存中占据的长度
8、相同相同,则它们能够表示的数值的范围相同则它们能够表示的数值的范围相同 因此因此,一一个个int型的常量也同时是一个型的常量也同时是一个long int型常量型常量,可以赋可以赋给给int型或型或long int型变量型变量 l(4) 常量无常量无unsigned型型 但一个非负值的整数可以但一个非负值的整数可以赋值给赋值给unsigned整型变量整型变量,只要它的范围不超过变只要它的范围不超过变量的取值范围即可量的取值范围即可 12l一个整型常量可以用一个整型常量可以用3种不同的方式表示种不同的方式表示: l(1) 十进制整数十进制整数 如如1357,-432,0等等 在一个整型在一个整型
9、常量后面加一个字母常量后面加一个字母l或或L,则认为是则认为是long int型常量型常量 例如例如123L,421L,0L等等,这往往用于函数调用中这往往用于函数调用中 l(2) 八进制整数八进制整数 在常数的开头加一个数字在常数的开头加一个数字0,就表示就表示这是以八进制数形式表示的常数这是以八进制数形式表示的常数 如如020表示这是表示这是八进制数八进制数20,它相当于十进制数它相当于十进制数16 l(3) 十六进制整数十六进制整数 在常数的开头加一个数字在常数的开头加一个数字0和一和一个英文字母个英文字母X(或或x),就表示这是以十六进制数形式表就表示这是以十六进制数形式表示的常数示的
10、常数 如如0X20表示这是十六进制数表示这是十六进制数20,它相当它相当于十进制数于十进制数32 13l2. 浮点数的表示方法浮点数的表示方法l一个浮点数可以用两种不同的方式表示一个浮点数可以用两种不同的方式表示: l(1) 十进制小数形式十进制小数形式 如如21.456,-7.98等等 它一般由它一般由整数部分和小数部分组成整数部分和小数部分组成,可以省略其中之一可以省略其中之一(如如78.或或.06, .0),但不能二者皆省略但不能二者皆省略 lC+编译系统把用这种形式表示的浮点数一律按双编译系统把用这种形式表示的浮点数一律按双精度常量处理精度常量处理,在内存中占在内存中占8个字节个字节
11、如果在实数的如果在实数的数字之后加字母数字之后加字母F或或f,表示此数为单精度浮点数表示此数为单精度浮点数,如如1234F,-43f,占占4个字节个字节 14l(2) 指数形式指数形式(即浮点形式即浮点形式)一个浮点数可以写成指数形式。一个浮点数可以写成指数形式。思考:思考:3.14159可以表示的形式可以表示的形式在程序中应表示为在程序中应表示为: 0.314159e1 3.14159e0 31.4159e-1 314.159e-2用字母用字母e表示其后的数是以表示其后的数是以10为底的幂为底的幂, 其一般形式为其一般形式为 数符数符 数字部分数字部分 指数部分指数部分15l在程序中不论把浮
12、点数写成小数形式还是指数在程序中不论把浮点数写成小数形式还是指数 形式形式,在内存中都是以指数形式在内存中都是以指数形式(即浮点形式即浮点形式)存储的存储的 例如不论在程序中写成例如不论在程序中写成314.159或或314.159e0, 31.4159e1, 3.14159e2, 0.314159e3等形式等形式,l在内存中都是以在内存中都是以规范化规范化的指数形式存放的指数形式存放, l对于以指数形式表示的数值常量对于以指数形式表示的数值常量,也都作为双精度常量也都作为双精度常量处理处理 16l2.2.3 字符常量字符常量l1. 普通的字符常量普通的字符常量l用用单撇号单撇号括起来的一个字符
13、就是字符型常量括起来的一个字符就是字符型常量 l如如a,#,%,D都是合法的字符常量都是合法的字符常量,在内存中占在内存中占一个字节一个字节 注意注意: l字符常量只能包括一个字符字符常量只能包括一个字符,如如AB 是不合法的是不合法的 l字符常量区分大小写字母字符常量区分大小写字母,如如A和和a是两个不同是两个不同的字符常量的字符常量 l撇号撇号()是定界符是定界符,而不属于字符常量的一部分而不属于字符常量的一部分 如如couta;输出的是一个字母输出的是一个字母“a”,而不是而不是3个字个字符符“a ” 17l2. 转义字符常量转义字符常量l除了以上形式的字符常量外除了以上形式的字符常量外
14、,C+还允许用一种特殊形还允许用一种特殊形式的字符常量式的字符常量,就是以就是以 “”开头的字符序列开头的字符序列 l例如例如,n代表一个代表一个“换行换行”符符 “coutn; ” 将输出将输出一个换行一个换行,其作用与其作用与“coutendl; ” 相同相同 这种这种“控控制字符制字符”,在屏幕上是不能显示的在屏幕上是不能显示的 在程序中也无法用在程序中也无法用一个一般形式的字符表示一个一般形式的字符表示,只能采用特殊形式来表示只能采用特殊形式来表示 l常用的以常用的以“”开头的特殊字符见书中表开头的特殊字符见书中表2.2 1819l3. 字符数据在内存中的存储形式及其使用方法字符数据在
15、内存中的存储形式及其使用方法 将一个字符常量存放到内存单元时将一个字符常量存放到内存单元时,实际上并不实际上并不 是把该字符本身放到内存单元中去是把该字符本身放到内存单元中去,而是将该字符相应而是将该字符相应 的的ASCII代码放到存储单元中代码放到存储单元中 l如果字符变量如果字符变量c1的值为的值为a,c2的值为的值为b,则在变量中存则在变量中存放的是放的是a的的ASCII码码97,b 的的ASCII码码98,如图如图(a)所示所示,实际上在内存中是以二进制形式存放的实际上在内存中是以二进制形式存放的,如图如图(b)所示所示 20例例2.1 将字符赋给整型变量将字符赋给整型变量 #incl
16、ude using namespace std;int main( ) int i,j; /i和和j是整型变量是整型变量 i=A; /将一个字符常量赋给整型变量将一个字符常量赋给整型变量i j=B; /将一个字符常量赋给整型变量将一个字符常量赋给整型变量j couti jn; /输出整型变量输出整型变量i和和j的值的值 return 0;执行时输出执行时输出 65 6621例例2.2 字符数据与整数进行算术运算字符数据与整数进行算术运算 下面程序的作用是将小写字母转换为大写字母下面程序的作用是将小写字母转换为大写字母 #include using namespace std;int main(
17、 ) char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; coutc1 c2endl; return 0;运行结果为运行结果为A B22l4. 字符串常量字符串常量l用双撇号括起来的部分就是字符串常量用双撇号括起来的部分就是字符串常量,如如abc,Hello!,a+b,Liping都是都是 字符串常量字符串常量 字符串常量字符串常量abc在内存中占在内存中占4个字节个字节 (而不是而不是3个字节个字节),见图见图 l编译系统会在字符串最后自动加一个编译系统会在字符串最后自动加一个0作为字符串作为字符串结束标志结束标志 但但0并不是字符串的一部分并不是字符串的
18、一部分,它只作为字它只作为字符串的结束标志符串的结束标志 23l如如:coutabcendl; 输出输出3个字符个字符abc,而不包括而不包括0 注意注意: a和和a代表不同的含义代表不同的含义,a是字符串常量是字符串常量,a 是字符常量是字符常量 前者占两个字节前者占两个字节,后者占后者占1个字节个字节 l请分析下面的程序片段请分析下面的程序片段: char c; /定义一个字符变量定义一个字符变量 c=a; /正确正确 c=a; /错误错误,c只能容纳一个字符只能容纳一个字符24l如果如果“”后面的字符不能与后面的字符不能与“”组成一个合法的转义组成一个合法的转义 字符字符(如如c),则在
19、编译时显示出错信息则在编译时显示出错信息 如果有以下输出语句如果有以下输出语句: coutabcnendl; 则会输出则会输出: abc,然后换行然后换行 25l2.2.4 符号常量符号常量为了编程和阅读的方便为了编程和阅读的方便,在在C+程序设计中程序设计中,常用一个符号常用一个符号名代表一个常量名代表一个常量,称为称为符号常量符号常量,即以标识符形式出现的即以标识符形式出现的常量常量 例例2.3 符号常量的使用符号常量的使用 #define PRICE 30 /注意这不是语句注意这不是语句,末尾不要加分号末尾不要加分号#include using namespace std;int mai
20、n ( ) int num,total; num=10; total=num * PRICE; couttotal=totalendl; return 0; 程序运行结果为程序运行结果为 total=300 26l请注意请注意符号常量虽然有名字符号常量虽然有名字,但它不是变量但它不是变量 它的值在其作用域它的值在其作用域(在本例中为主函数在本例中为主函数)内是不能内是不能改变的改变的,也不能被赋值也不能被赋值 如用赋值语句如用赋值语句“PRICE=40;”给给PRICE赋值是错误的赋值是错误的 l使用符号常量的好处使用符号常量的好处是是:l(1) 含义清楚含义清楚 l(2) 在需要改变一个常量
21、时能做到在需要改变一个常量时能做到“一改全改一改全改” 如如: #define PRICE 35272.3 变量变量2.3.1 什么是变量什么是变量在程序运行期间其值可以改变的量称为变量在程序运行期间其值可以改变的量称为变量 一个一个变量应该有一个名字变量应该有一个名字,并在内存中占据一定的存储单元并在内存中占据一定的存储单元,在在该存储单元中存放变量的值该存储单元中存放变量的值 请注意区分变量名和变量值请注意区分变量名和变量值这两个不同的概念这两个不同的概念,见图见图变量在程序的执行中能够赋值,发生变化变量在程序的执行中能够赋值,发生变化。变量有一个。变量有一个名字,并在使用之前要说明其类型
22、,一经说明,就在内名字,并在使用之前要说明其类型,一经说明,就在内存中占据与其类型相应的存储单元。存中占据与其类型相应的存储单元。28l2.3.2 变量名规则变量名规则 和其他高级语言一样和其他高级语言一样,用来标识变量用来标识变量 符号常量符号常量 函数函数 数组数组 类型等实体名字的有效字符序列称为标类型等实体名字的有效字符序列称为标识符识符(identifier) 简单地说简单地说,标识符就是一个名字标识符就是一个名字 变量名是标识符的一种变量名是标识符的一种,变量的名字必须遵循标识符的变量的名字必须遵循标识符的命名规则命名规则 C+规定标识符只能由字母规定标识符只能由字母 数字和下划数
23、字和下划线线3种字符组成种字符组成,且第一个字符必须为字母或下划线且第一个字符必须为字母或下划线 下面列出的是合法的标识符下面列出的是合法的标识符,也是也是合法的合法的变量名变量名: sum, average, total, day, month, Student_name, tan, BASIC, li_ling 下面是下面是不合法的不合法的标识符和变量名标识符和变量名: M.D.John, $123, #33, 3G64, Ling li, C+, Zhang-ling, U.S.A.29l注意注意,在在C+中中,大写字母和小写字母被认为是大写字母和小写字母被认为是 两个不同的字符两个不同
24、的字符 因此因此,sum和和SUM是两个不同的是两个不同的变量名变量名 一般地一般地,变量名用小写字母表示变量名用小写字母表示,与人们日与人们日常习惯一致常习惯一致,以增加可读性以增加可读性 应注意变量名不能与应注意变量名不能与C+的关键字的关键字 系统函数名和类名相同系统函数名和类名相同 lC+没有规定标识符的长度没有规定标识符的长度(字符个数字符个数),但各个具体但各个具体的的C编译系统都有自己的规定编译系统都有自己的规定 有的系统取有的系统取32个字个字符符,超过的字符不被识别超过的字符不被识别 30l在国外软件开发工作中在国外软件开发工作中,常习惯在变量前面加一常习惯在变量前面加一个字
25、母以表示该变量的类型(个字母以表示该变量的类型(匈牙利表示法匈牙利表示法),如如iCount表示这是一个整型变量表示这是一个整型变量,cSex表示这是表示这是一个字符型变量一个字符型变量 另外:另外: studentName (骆驼表示法骆驼表示法)重要:重要:“见名知意见名知意”31l2.3.3 定义变量定义变量l在在C+语言中语言中,要求对所有用到的变量作强制定义要求对所有用到的变量作强制定义,也也 就是必须就是必须“先定义先定义,后使用后使用”, 定义变量的一般形式是定义变量的一般形式是 变量类型变量类型 变量名表列变量名表列;l变量名表列指的是一个或多个变量名的序列变量名表列指的是一个
26、或多个变量名的序列 如如 float a,b,c,d,e;l可以在定义变量时指定它的初值可以在定义变量时指定它的初值 如如 float a=83.5,b,c=64.5,d=81.2,e; lC语言要求变量的定义应该放在所有的执行语句之前语言要求变量的定义应该放在所有的执行语句之前,而而C+则放松了限制则放松了限制,只要求在第一次使用该变量之前进行定义即只要求在第一次使用该变量之前进行定义即可可 也就是说也就是说,它可以出现在语句的中间它可以出现在语句的中间,如如 int a;/定义变量定义变量a(在使用在使用a之前定义之前定义) a=3; /执行语句执行语句,对对a赋值赋值 float b;
27、/定义变量定义变量b(在使用在使用b之前定义之前定义) b=4.67; /执行语句执行语句,对对b赋值赋值32lC+要求对变量作强制定义的目的是要求对变量作强制定义的目的是:l(1) 凡未被事先定义的凡未被事先定义的,不作为变量名不作为变量名,这就能保证这就能保证 程序中变量名使用得正确程序中变量名使用得正确 例如例如,如果在声明部分写了如果在声明部分写了 int student; 而在执行语句中错写成而在执行语句中错写成statent 如如: statent=30;l(2) 每一个变量被指定为一每一个变量被指定为一确定类型确定类型,在编译时就能为其分在编译时就能为其分配相应的存储单元配相应的
28、存储单元 如如指定指定a和和b为为int型型,一般的编译系统一般的编译系统对其各分配对其各分配4个字节个字节,并按整数方式存储数据并按整数方式存储数据 l(3) 指定每一变量属于一个特定的类型指定每一变量属于一个特定的类型,这就便于在编译时这就便于在编译时,据此据此检查该变量所进行的运算是否合法检查该变量所进行的运算是否合法 例如例如,整型变量整型变量a和和b,可以进行求余运算可以进行求余运算: a%b %是是“求余求余”(见见2.4 节节),得到得到a/b的余数的余数 332.3.4 为变量赋初值为变量赋初值 l允许在定义变量时对它赋予一个初值允许在定义变量时对它赋予一个初值,这称为这称为
29、变量初始化变量初始化 初值可以是常量初值可以是常量,也可以是一个有确定也可以是一个有确定值的表达式值的表达式 如:如: float a,b=5.78*3.5,c=6.7; 如果对变量未赋初值如果对变量未赋初值,则该变量的初值是一个不可预测则该变量的初值是一个不可预测的值的值,即该存储单元中当时的内容是不知道的即该存储单元中当时的内容是不知道的 例如例如,若未对若未对a和和b赋值赋值,执行输出语句执行输出语句lcouta b c(大于大于)=(大于或等于大于或等于)=(小于或等于小于或等于)!=(不等于不等于)l(3) 逻辑运算符逻辑运算符 l&(逻辑与逻辑与) |(逻辑或逻辑或) !(
30、逻辑非逻辑非)l(4) 位运算符位运算符 l(按位右移按位右移) &(按位与按位与) |(按位或按位或) (按位异或按位异或) (按位取按位取反反)l(5) 赋值运算符赋值运算符 (=及其扩展赋值运算符及其扩展赋值运算符)l(6) 条件运算符条件运算符 (?:)l(7) 逗号运算符逗号运算符 (,)l(8) 指针运算符指针运算符 (*)l(9)引用运算符和地址运算符引用运算符和地址运算符 (&)l(10) 求字节数运算符求字节数运算符(sizeof)l(11) 强制类型转换运算符强制类型转换运算符( (类型类型) 或类型或类型( )l(12) 成员运算符成员运算符 (.)l(1
31、3) 指向成员的运算符指向成员的运算符 (-)l(14) 下标运算符下标运算符 ( )l(15) 其他其他 (如函数调用运算符如函数调用运算符()382.5 算术运算符与算术表达式算术运算符与算术表达式l2.5.1 基本的算术运算符基本的算术运算符 +(加法运算符加法运算符,或正值运算符或正值运算符 如如3+5,+3) -(减法运算符减法运算符,或负值运算符或负值运算符 如如5-2,-3) * (乘法运算符乘法运算符 如如3*5) /(除法运算符除法运算符 如如5/3) 两个整数相除结果为整数两个整数相除结果为整数 1/2=0 5/2=2 %(模运算符模运算符,或称或称求余运算符求余运算符,%
32、两侧均应为整型数据两侧均应为整型数据)39l说明说明,两个整数相除的结果为整数两个整数相除的结果为整数,如如5/3的结果值的结果值 为为1,舍去小数部分舍去小数部分 但是但是,如果除数或被除数中有一个为如果除数或被除数中有一个为负值负值,则舍入的方向是不固定的则舍入的方向是不固定的 例如例如,-5/3在有的在有的C+系统上得到结果系统上得到结果-1,有的有的C+系统则给出结果系统则给出结果-2 多数编多数编译系统采取译系统采取“向零取整向零取整”的方法的方法,即即5/3的值等于的值等于1,-5/3的值等于的值等于-1,取整后向零靠拢取整后向零靠拢 l如果参加如果参加+, -, *, / 运算的
33、两个数中有一个数为运算的两个数中有一个数为float型数型数据据,则运算的结果是则运算的结果是double型型,因为因为C+在运算时对所有在运算时对所有float型数据都按型数据都按double型数据处理。型数据处理。402.5.2 算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性l用算术运算符和括号将运算对象用算术运算符和括号将运算对象(也称操作数也称操作数)连接连接 起来的起来的 符合符合C+语法规则的式子语法规则的式子,称称C+算术表达式算术表达式 运算对象包括常量运算对象包括常量 变量变量 函数等函数等 例如例如: a*b/c-1.5+alC+语言规定了运算符的语言
34、规定了运算符的优先级和结合性优先级和结合性 l在求解表达式时在求解表达式时,先按运算符的优先级别高低次序执行先按运算符的优先级别高低次序执行, 如果如果在一个运算对象两侧的运算符的优先级别相同在一个运算对象两侧的运算符的优先级别相同,如如a-b+c,则则按规定的按规定的“结合方向结合方向”处理处理 lC+规定了各种运算符的结合方向规定了各种运算符的结合方向(结合性结合性),算术运算符的结算术运算符的结合方向为合方向为“自左至右自左至右”, 又称又称“左结合性左结合性”,即运算对象先与即运算对象先与左面的运算符结合左面的运算符结合 以后可以看到有些运算符的结合方向以后可以看到有些运算符的结合方向
35、为为“自右至左自右至左”,即即“右结合性右结合性”(例如赋值运算符例如赋值运算符) 41 2.5.3 表达式中各类数值型数据间的混合运算表达式中各类数值型数据间的混合运算l在表达式中常遇到不同类型数据之间进行运算在表达式中常遇到不同类型数据之间进行运算,如如 10+a+1.5-8765.1234*bl在进行运算时在进行运算时,不同类型的数据要先转换成同一类型不同类型的数据要先转换成同一类型,然后然后进行运算进行运算 转换的规则按图所示转换的规则按图所示 l假设已指定假设已指定i为整型变量为整型变量,f为为float变量变量,d为为double型变量型变量,e为为long型型,有下面表达式有下面
36、表达式: 10+a+i*f-d/e结果类型为:结果类型为:double422.5.4 自增和自减运算符自增和自减运算符l在在C和和C+中中,常在表达式中使用自增常在表达式中使用自增(+)和自减和自减(-)运算符运算符,他们的作用是使变量的值增他们的作用是使变量的值增1或减或减1,如如 +i -i i+ i 正确地使用正确地使用+和和-,可以使程序简洁可以使程序简洁 清晰清晰 高效高效 43注意:注意:自增、自减运算符运用于其他表达式中自增、自减运算符运用于其他表达式中i3 int i, j; i=3; j = +i;i=4 j=4 +在前在前, 先运算先运算,后赋值后赋值 int i, j;
37、i=3; j = i+;i=4 j=3 +在后在后, 先赋值先赋值,后运算后运算j44i3j34442.5.5 强制类型转换运算符强制类型转换运算符l有时程序编制者还可以利用强制类型转换运算符将一有时程序编制者还可以利用强制类型转换运算符将一 个表达式转换成所需类型个表达式转换成所需类型 例如例如: (double)a (将将a转换成转换成double类型类型) (int)(x+y) (将将x+y的值转换成整型的值转换成整型) (float)(5%3) (将将5%3的值转换成的值转换成float型型)l强制类型转换的一般形式为:强制类型转换的一般形式为: (类型名类型名)(表达式表达式)l注意
38、注意: 如果要进行强制类型转换的对象是一个变量如果要进行强制类型转换的对象是一个变量,该变量可该变量可以不用括号括起来以不用括号括起来 如果要进行强制类型转换的对象是一个如果要进行强制类型转换的对象是一个包含多项的表达式包含多项的表达式,则表达式应该用括号括起来则表达式应该用括号括起来 比较比较:l (int)(x+y) (int)x+ylC+还增加了以下形式还增加了以下形式: 类型名类型名(表达式表达式) 如如 int(x) 或或 int(x+y)45l需要说明的是在强制类型转换时需要说明的是在强制类型转换时,得到一个所需类型得到一个所需类型 的中间变量的中间变量,但原来变量的类型未发生变化
39、但原来变量的类型未发生变化 l例例2.4 强制类型转换强制类型转换 #include using namespace std; int main( ) float x; int i; x=3.6; i=(int)x; coutx=x,i= iendl; return 0; 运行结果如下运行结果如下: x=3.6,i=3462.6 赋值运算符与赋值表达式赋值运算符与赋值表达式2.6.1 赋值运算符赋值运算符 赋值符号赋值符号“=”就是赋值运算符就是赋值运算符,它的作用是将一个数据它的作用是将一个数据赋给一个变量赋给一个变量 如如“a=3”的作用是执行一次赋值操作的作用是执行一次赋值操作(或称赋值
40、运算或称赋值运算) 把常量把常量3赋给变量赋给变量a 也可以将一个也可以将一个表达式的值赋给一个变量表达式的值赋给一个变量 l=左边左边必须是变量名。必须是变量名。l若若“ = ” 两边变量类型不同,在赋值时要进行两边变量类型不同,在赋值时要进行类型转类型转换换。l转换原则:根据左边变量的类型转换。转换原则:根据左边变量的类型转换。47 2.6.2 赋值过程中的类型转换赋值过程中的类型转换l如果赋值运算符两侧的类型不一致如果赋值运算符两侧的类型不一致,但都是数值型但都是数值型 或字符型时或字符型时,在赋值时会自动进行类型转换在赋值时会自动进行类型转换 l(1) 将浮点型数据将浮点型数据(包括单
41、包括单 双精度双精度)赋给整型变量时赋给整型变量时,舍弃舍弃其小数部分其小数部分 l(2) 将整型数据赋给浮点型变量时将整型数据赋给浮点型变量时,数值不变数值不变,但以指数形但以指数形式存储到变量中式存储到变量中 l(3) 将一个将一个double型数据赋给型数据赋给float变量时变量时,要注意数值范要注意数值范围不能溢出围不能溢出 l(4) 字符型数据赋给整型变量字符型数据赋给整型变量,将字符的将字符的ASCII码赋给整型码赋给整型变量变量 48l (5) 将一个将一个int short或或long型数据赋给一个型数据赋给一个 char型变量型变量,只将其低只将其低8位原封不动地送到位原封
42、不动地送到char型型变量变量(发生截断发生截断) 例如例如 short int i=289; char c; c=i; /将一个将一个int型数据赋给一个型数据赋给一个char型变量型变量l赋值情况见图赋值情况见图 49l(6) 将将signed型数据赋给长度相同的型数据赋给长度相同的unsigned型型 变量变量,将存储单元内容原样照搬将存储单元内容原样照搬(连原有的符号位也连原有的符号位也 作为数值一起传送作为数值一起传送) l例例2.5 将有符号数据传送给无符号变量将有符号数据传送给无符号变量 #include using namespace std;int main( ) unsig
43、ned short a; short int b=-1; a=b; couta=aendl; return 0;运行结果为运行结果为6553550l不同类型的整型数据间的赋值归根结底就是一条不同类型的整型数据间的赋值归根结底就是一条: 按存储单元中的存储形式直接传送按存储单元中的存储形式直接传送 lC和和C+使用灵活使用灵活,在不同类型数据之间赋值时在不同类型数据之间赋值时,常常会常常会出现意想不到的结果出现意想不到的结果,而编译系统并不提示出错而编译系统并不提示出错,全靠全靠程序员的经验来找出问题程序员的经验来找出问题 这就要求编程人员对出现这就要求编程人员对出现问题的原因有所了解问题的原因
44、有所了解,以便迅速排除故障以便迅速排除故障 512.6.3 复合的赋值运算符复合的赋值运算符在赋值符在赋值符“=”之前加上其他运算符之前加上其他运算符,可以构成复合的运算符可以构成复合的运算符 如果在如果在“=”前加一个前加一个“+”运算符就成了复合运算符运算符就成了复合运算符“+=” 例如:例如: a+=3 等价于等价于 a=a+3 x*=y+8等价于等价于 x=x*(y+8) x%=3 等价于等价于 x=x%3l为便于记忆为便于记忆,可以这样理解可以这样理解: a+= b(其中其中a为变量为变量,b为表达式为表达式) a+= b (将有下划线的将有下划线的“a+”移到移到“=”右侧右侧)
45、a = a + b (在在“=”左侧补上变量名左侧补上变量名a)l注意注意,如果如果b是包含若干项的表达式是包含若干项的表达式,则相当于它有括号则相当于它有括号 如如 x %= y+3 x %= (y+3) x = x%(y+3)(不要错认为不要错认为x=x%y+3)52l凡是二元凡是二元(二目二目)运算符运算符,都可以与赋值符一起组合都可以与赋值符一起组合成复合赋值符成复合赋值符 C+可以使用以下几种复合赋值运算符可以使用以下几种复合赋值运算符: +=,-=,*=,/=,%=,=,&=,=,|= 其中后其中后5种是有关位运算的(种是有关位运算的(熟练掌握前五个熟练掌握前五个) lC+
46、之所以采用这种复合运算符之所以采用这种复合运算符,一是为了简化程序一是为了简化程序,使程序精炼使程序精炼,二是为了提高编译效率二是为了提高编译效率(这样写法与这样写法与“逆逆波兰波兰”式一致式一致,有利于编译有利于编译,能产生质量较高的目标代能产生质量较高的目标代码码) 专业的程序员在程序中常用复合运算符专业的程序员在程序中常用复合运算符,初学者初学者可能不习惯可能不习惯,也可以不用或少用也可以不用或少用 532.6.4 赋值表达式赋值表达式l由赋值运算符将一个变量和一个表达式连接起来的由赋值运算符将一个变量和一个表达式连接起来的 式子称为式子称为“赋值表达式赋值表达式” l它的一般形式为:它
47、的一般形式为: 如:如:a=5是一个赋值表达式是一个赋值表达式 l赋值运算符左侧的标识符称为赋值运算符左侧的标识符称为“左值左值” ,变量可以作为左,变量可以作为左值值,而表达式而表达式a+b就不能作为左值就不能作为左值,常变量也不能作为左值常变量也不能作为左值,因因为常变量不能被赋值为常变量不能被赋值 l出现在赋值运算符右侧的表达式称为出现在赋值运算符右侧的表达式称为“右值右值” 。l左值可以出现在赋值运算符右侧左值可以出现在赋值运算符右侧,因而左值都可以作为右值因而左值都可以作为右值 int a=3,b,c; b=a; / b是左值是左值 c=b; / b也是右值也是右值54l赋值表达式中的赋值表达式中的“表达式表达式”,又可以是一个赋值表达
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园跳绳运动课程教案集锦
- 2026黑龙江省住房和城乡建设厅直属事业单位公开招聘工作人员14人笔试参考题库及答案解析
- 2026博乐市第七中学教师招聘(1人)笔试模拟试题及答案解析
- 综合性岗位面试题目及答题技巧
- 2026年枣庄市胸科医院急需紧缺人才引进(5名)笔试备考题库及答案解析
- 劳动合同管理规范及补充协议模板
- 2026重庆九龙坡区网信办公益性岗位招聘2人考试备考题库及答案解析
- 交通运输工程师继续教育重点题库
- 2026信达生物门诊销售培训生招聘笔试备考题库及答案解析
- 2026天津南开大学附属医院招聘5人考试备考题库及答案解析
- 退役军人事务
- 2026中证数据校园招聘备考题库(含答案详解)
- 《老年临床营养管理服务规范》编制说明
- 2025-2026学年湘艺版小学音乐四年级下册教学计划及进度表
- 一汽集团招聘网络测评试题
- 地下商场火灾应急处置预案
- 2026年河南农业职业学院单招职业技能测试模拟测试卷附答案
- 疫苗冷链管理培训课件
- DRG付费下医院肾内科运营策略
- T-CECA 20011-2021 含铁含锰地下水接触氧化法给水处理技术规程
- 商铺销售协议书模板
评论
0/150
提交评论