数据类型和输入输出幻灯片.ppt
华南师范大学计算机学院华南师范大学计算机学院 庞雄文庞雄文 2011 2011数据类型和输入输出第1页,共129页,编辑于2022年,星期六3.1 C3.1 C程序的组成程序的组成w/3_1.cppw#include wusing namespace std;wint main()ww coutHello!n;w coutWelcome to c+!n;ww运行结果:运行结果:wHello!wWelcome to c+!第2页,共129页,编辑于2022年,星期六wC程序的组成有1个main函数,是应用程序的入口,程序从main函数的第一行开始运行程序的后缀名是.c或者.cppmain函数可以调用其他函数,包括:自己写的函数标准语言的库函数,要包含对应的定义文件(.h)编译环境提供的库函数,要包含对应的定义文件(.h)3.1 C3.1 C程序的组成程序的组成第3页,共129页,编辑于2022年,星期六 所有的语言系统都是由字符集和规则集组成的“字符”是语言的不可分解的最基本语法单位 由字符可以组成“词”,由词组成“表达式”、“句子”,又由各种句子构成“函数”、“程序”3.2 3.2 标识符标识符第4页,共129页,编辑于2022年,星期六C+语言的字符集是ASCII码的子集,有:26个小写字母:a b c d e f g h i j k l m n o p q r s t u v w x y z26个大写字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z10个数字:0 1 2 3 4 5 6 7 8 9其他符号:空格 !#%&()*+-/:;?_|.3.2 3.2 标识符标识符第5页,共129页,编辑于2022年,星期六 单词单词是语言中有意义的最小语法单位。根据形成规则,一个单词由一个或多个字符组成。3.2 3.2 标识符标识符第6页,共129页,编辑于2022年,星期六1关键字关键字又称保留字关键字是系统预定义的单词。C+不允许对关键字重定义。3.2 3.2 标识符标识符C+常用的关键字:auto break case char class const continue default delete elseenum explicit extern float for friend goto if inline int long new operator private protected public register return short signed sizeof static struct switch this typedef union unsigned virtual void while第7页,共129页,编辑于2022年,星期六2标识符标识符(Identifier)由程序员定义的命名符 3.2 3.2 标识符标识符语法:以字母或下划线开始,由字母、数字和下划线组成语法:以字母或下划线开始,由字母、数字和下划线组成的符号串的符号串 注意注意:break main int 等等不能用于命名程序中的自定义不能用于命名程序中的自定义函数、变量、常量函数、变量、常量(1)不能使用关键字作用户标识符;不能使用关键字作用户标识符;(2)C+中,字母大小写敏感;中,字母大小写敏感;(3)标识符尽可能做到见文知义。标识符尽可能做到见文知义。Aa 和和 aa是两个不同的标识符是两个不同的标识符第8页,共129页,编辑于2022年,星期六2标识符标识符 由程序员定义的命名符 3.2 3.2 标识符标识符语法:以字母或下划线开始,由字母、数字和下划线组成的符号语法:以字母或下划线开始,由字母、数字和下划线组成的符号串串 例例 判断以下标识符的正确性:判断以下标识符的正确性:合法标识符有:合法标识符有:a x1 no_1 _a2c sum Name name不合法标识符有:不合法标识符有:2a x+y a,b a&b const 第9页,共129页,编辑于2022年,星期六3.2 3.2 标识符标识符例例 判断以下标识符的正确性:判断以下标识符的正确性:合法标识符有:合法标识符有:a x1 no_1 _a2c sum Name name不合法标识符有:不合法标识符有:2a x+y a,b a&b const 它们是不同的标识符2标识符标识符 由程序员定义的命名符 语法:以字母或下划线开始,由字母、数字和下划线组成的符号串语法:以字母或下划线开始,由字母、数字和下划线组成的符号串 第10页,共129页,编辑于2022年,星期六3.2 3.2 标识符标识符例例 判断以下标识符的正确性:判断以下标识符的正确性:以数字开头合法标识符有:合法标识符有:a x1 no_1 _a2c sum Name name不合法标识符有:不合法标识符有:2a x+y a,b a&b const 2标识符标识符 由程序员定义的命名符 语法:以字母或下划线开始,由字母、数字和下划线组成语法:以字母或下划线开始,由字母、数字和下划线组成的符号串的符号串 第11页,共129页,编辑于2022年,星期六3.2 3.2 标识符标识符例例 判断以下标识符的正确性:判断以下标识符的正确性:合法标识符有:合法标识符有:a x1 no_1 _a2c sum Name name不合法标识符有:不合法标识符有:2a x+y a,b a&b const 非法符号2标识符标识符 由程序员定义的命名符 语法:以字母或下划线开始,由字母、数字和下划线组成的符号串语法:以字母或下划线开始,由字母、数字和下划线组成的符号串 第12页,共129页,编辑于2022年,星期六3.2 3.2 标识符标识符例例 判断以下标识符的正确性:判断以下标识符的正确性:关键字合法标识符有:合法标识符有:a x1 no_1 _a2c sum Name name不合法标识符有:不合法标识符有:2a x+y a,b a&b const 2标识符标识符 由程序员定义的命名符 语法:以字母或下划线开始,由字母、数字和下划线组成的语法:以字母或下划线开始,由字母、数字和下划线组成的符号串符号串 第13页,共129页,编辑于2022年,星期六3 3运算符运算符 运算符是对数据进行操作的简洁表达,以单词的形式调用系统预定义函数 3.2 3.2 标识符标识符例如:例如:+加加 -减减 *乘乘 /除除 大于大于 =大于或等于大于或等于 =等于等于 !=!=不等于不等于=小于或等于小于或等于第14页,共129页,编辑于2022年,星期六4 4分隔符分隔符 用于在程序分隔不同的语法单位,便于编译系统的识别用于在程序分隔不同的语法单位,便于编译系统的识别3.2 3.2 标识符标识符常常用用的的分分隔隔符符有有:空空格格,逗逗号号,分分号号,冒冒号号,括括号号,注注释释符符等,等,有些单词,例如运算符,也起到分隔符的作用有些单词,例如运算符,也起到分隔符的作用 例如:例如:int a,b,c;a=b+c;必须用空格作分隔符第15页,共129页,编辑于2022年,星期六3.2 3.2 标识符标识符例如:例如:int a,b,c;a=b+c;运算符也用作分隔符4 4分隔符分隔符 用用于于在在程程序序分分隔隔不不同同的的语语法法单单位位,便便于于编编译译系系统统的的识识别别常用的分隔符有:空格,逗号,分号,冒号,括号,注释符等,常用的分隔符有:空格,逗号,分号,冒号,括号,注释符等,有些单词,例如运算符,也起到分隔符的作用有些单词,例如运算符,也起到分隔符的作用 第16页,共129页,编辑于2022年,星期六5 5常数常数 常数由数据的书写形式定义它的类型和值 基本类型常数在程序运行时直接参与运算,不占用内存存储 例如:例如:500 3.14159 0.263e-10 N3.2 3.2 标识符标识符第17页,共129页,编辑于2022年,星期六例如:例如:500 3.14159 0.263e-10 N整数3.2 3.2 标识符标识符5 5常数常数 常数由数据的书写形式定义它的类型和值 基本类型常数在程序运行时直接参与运算,不占用内存存储 第18页,共129页,编辑于2022年,星期六例如:例如:500 3.14159 0.263e-10 N浮点数3.2 3.2 标识符标识符5 5常数常数 常数由数据的书写形式定义它的类型和值 基本类型常数在程序运行时直接参与运算,不占用内存存储 第19页,共129页,编辑于2022年,星期六例如:例如:500 3.14159 0.263e-10 N字符3.2 3.2 标识符标识符5 5常数常数 常数由数据的书写形式定义它的类型和值 基本类型常数在程序运行时直接参与运算,不占用内存存储 第20页,共129页,编辑于2022年,星期六类型相同的数据有相同的表示形式、存储格式以及相关的操作 程序中使用的所有数据都必定属于某一种数据类型 3.3 3.3 数据类型数据类型第21页,共129页,编辑于2022年,星期六3.3.1 C+3.3.1 C+的数据类型的数据类型 整型整型 (int)浮点型浮点型(float,double)基本类型基本类型 字符型字符型(char)空类型空类型(void)用户定义类型用户定义类型 枚举类型枚举类型(enum)数据类型数据类型 数组数组()结构结构(struct)联合联合(union)类类 (class)指针类型指针类型(*)简单类型简单类型结构类型结构类型第22页,共129页,编辑于2022年,星期六3.3.2 3.3.2 数据存储数据存储:一个二进制位(bit)存储阵列存储阵列只能是只能是“0”或者或者“1”第23页,共129页,编辑于2022年,星期六:8位一个字节(byte)存储阵列存储阵列3.3.2 3.3.2 数据存储数据存储可以表示数字可以表示数字0255表示一个字符(英文字表示一个字符(英文字母、数字、符号)母、数字、符号)ACSII码码第24页,共129页,编辑于2022年,星期六:16位一个字(word)存储阵列存储阵列3.3.2 3.3.2 数据存储数据存储两个字节两个字节(字字)保存一个宽字保存一个宽字符,符,UNICODE编码编码第25页,共129页,编辑于2022年,星期六b,B,KB,MB,GB,TBwTerabyte(TB),中文叫法:TwGigabyte(GB),中文叫法:GwMegabyte(MB),中文叫法:兆wKilobyte(KB),中文叫法:KwByte,中文叫法:字节wbit,中文叫法:位1 TB 1 TB=1,024 GB1,024 GB1 GB1 GB =1,024 MB1,024 MB1 MB1 MB =1,024 KB1,024 KB1 KB1 KB =1,024 B1,024 B1 B 1 B=8 b8 b第26页,共129页,编辑于2022年,星期六3.3.3 3.3.3 基本类型基本类型 int整数,在目前绝大多数机器上占4个字节所占字节数取决于机器字长float单精度浮点数,一般是4个字节长double双精度浮点数,一般是8个字节长char字符,一般是1个字节长用来表示256个ASCII字符,或者0255的整数第27页,共129页,编辑于2022年,星期六shortshort int,短整数,2个字节长,简称shortlonglong int,长整数,4个字节长,简称longlong double,高精度浮点数,一般是10个字节长。signed用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0)数据类型修饰符数据类型修饰符在定义变量时,计算机根据变在定义变量时,计算机根据变量的类型分配存储空间,并且量的类型分配存储空间,并且以该类型解释存放的数据以该类型解释存放的数据第28页,共129页,编辑于2022年,星期六数据类型的取值范围数据类型的取值范围第29页,共129页,编辑于2022年,星期六超出取值范围会怎样?(overflow)小蛇能吞下小蛇能吞下小蛇能吞下小蛇能吞下大象吗?大象吗?大象吗?大象吗?short int的范围是的范围是-3276732767如果我们给它一个小于如果我们给它一个小于-32767或者大于或者大于32767的数会如何呢?的数会如何呢?现场编程测验现场编程测验第30页,共129页,编辑于2022年,星期六#include void main()short int si_Exceed=40000;short int si_normal=10000;if(si_Exceedsi_normal)cout 40000 is bigger than 10000n;elsecout 40000 is smaller than 10000n;w运行结果会是什么?运行结果会是什么?第31页,共129页,编辑于2022年,星期六溢出所带来的问题w一台安装了Windows 95/98的机器,如果连续运行49.7天没有重新启动,可能死机 w原因:Windows自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。这个计数器是个unsigned long 类型的变量unsigned long的最大值是:4294967295一天有 24*60*60*1000=86400000毫秒4294967295/86400000=49.71026961805当49.7天的时候,此计数器会溢出,引起死机第32页,共129页,编辑于2022年,星期六1 1整型,有整型,有8 8进制、进制、1010进制和进制和1616进制进制3 3种进制种进制 以数字以数字“0”开始的整型常数是八进制数开始的整型常数是八进制数010和10大小不一样因为八进制并不常用,所以此种表示法比较少见,因而常被用错以以“0 x”或者或者“0X”开始的整型常数是十六进制开始的整型常数是十六进制AF和af用来表示十进制的10150 x11,0 x05,0 xFA,0 xFF十六进制的形式比较常用,可以很方便地转换为二进制第33页,共129页,编辑于2022年,星期六w补充知识(仅供了解)补充知识(仅供了解)原码:增加了一位符号位(即最高位为符号位),该原码:增加了一位符号位(即最高位为符号位),该位为位为0表示正数,该位为表示正数,该位为1表示负数,其余位表示数表示负数,其余位表示数值的大小值的大小反码:正数的反码与其原码相同;负数的反码是对反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外其原码逐位取反,但符号位除外 补码:正数的补码与其原码相同;负数的补码是在其补码:正数的补码与其原码相同;负数的补码是在其反码的末位加反码的末位加1 1 1整型,有整型,有8 8进制、进制、1010进制和进制和1616进制进制3 3种进制种进制 第34页,共129页,编辑于2022年,星期六1 1整型,有整型,有8 8进制、进制、1010进制和进制和1616进制进制3 3种进制种进制 w补充知识(仅供了解):补充知识(仅供了解):3和和-2原码表示?原码表示?反码表示?反码表示?补码表示?补码表示?w数值在计算机中是用补码来存储的数值在计算机中是用补码来存储的第35页,共129页,编辑于2022年,星期六 float 4 字节单精度浮点型double8 字节双精度浮点型long double 16 字节长双精度浮点型2 2浮点型浮点型 第36页,共129页,编辑于2022年,星期六小数表示法小数表示法+|-Digits.Digits F|f|L|l 2 2浮点型有小数表示法和指数表示法两种形式浮点型有小数表示法和指数表示法两种形式 指数表示法指数表示法+|-Digits.Digits指数 F|f|L|l(e|E)+|-Digits第37页,共129页,编辑于2022年,星期六3.23E10 0.23E-4 45.e+23 -23.68E123.23E10F 0.23E-4f 45.e+23L -23.68E12L指数计数法例子:指数计数法例子:第38页,共129页,编辑于2022年,星期六x=s*(1+m)*2e尾数,在0-1之间指数,也称为阶码符号位浮点数在计算机中的存储方式(IEEE 754)如果用如果用4 4个字节个字节(一个字节表示阶码一个字节表示阶码,3,3个字节表示尾数个字节表示尾数)来表示来表示浮点数,则在计算机的存储方式为:浮点数,则在计算机的存储方式为:浮点数的存储方式浮点数的存储方式(仅供了解,以后会学仅供了解,以后会学):第39页,共129页,编辑于2022年,星期六浮点数的存储方式浮点数的存储方式(仅供了解,以后会学仅供了解,以后会学):浮点数实际存储时,为了表示最大值和最小值,指数浮点数实际存储时,为了表示最大值和最小值,指数使用了偏移量使用了偏移量(float(float是是127,double=1023)127,double=1023):存储存储e=e=实际实际e+127e+127 实际实际e=e=存储存储e-127e-127深入了解参见:深入了解参见:IEEE-754百度百科百度百科浮点数计算器:浮点数计算器:浮点数计算器浮点数计算器浮点数计算器:浮点数计算器:浮点数计算器浮点数计算器第40页,共129页,编辑于2022年,星期六浮点数的陷阱#include void main()float f;f=123.456;if(f=123.456)coutf is equal to 123.456 indeed.;elsecout“In fact,f is not equal totf;w运行结果会是什么?运行结果会是什么?第41页,共129页,编辑于2022年,星期六wfloat的精度低,较易发生精度带来的相等性判断问题wdouble精度高,这个问题发生的概率小一些,但也存在w解决办法:if(fabs(f 123.456)1E-5)根据精度要求设定根据精度要求设定根据精度要求设定根据精度要求设定第42页,共129页,编辑于2022年,星期六字符一般用 ASCII 编码。C+的字符型与整型数据密切相关,以ASCII 值参与运算3 3字符型字符型 表示方式表示方式character字符,或八进制、十六进制值的转义符字符字符 char:char:单引号括起来的单引号括起来的一个字母一个字母第43页,共129页,编辑于2022年,星期六3 3字符型字符型 转义字符转义字符 escape_character 以 为前缀,表示改变后面escape_character符号或整数值的意义,使其成为控制符或字符值。一些特殊字符(无法从键盘输入或者在一些特殊字符(无法从键盘输入或者在一些特殊字符(无法从键盘输入或者在一些特殊字符(无法从键盘输入或者在C C语言里有它用)语言里有它用)语言里有它用)语言里有它用)用转义字符表示用转义字符表示用转义字符表示用转义字符表示转义的思想在网络协议和文件格式中常用转义的思想在网络协议和文件格式中常用第44页,共129页,编辑于2022年,星期六3 3字符型字符型 C+常用转义字符 名称字符形式值空字符(Null)00X00换行(NewLine)n0X0A换页(FormFeed)f 0X0C回车(Carriage Return)r 0X0D退格(BackSpasc)b 0X08响铃(Bell)a 0X07水平制表(Horizontal Tab)t 0X09垂直制表(Vertical Tab)v 0X0B反斜杠(backslash)0X5C问号(question mark)?0X3F单引号(single quote)0X27双引号(double quote)0X22第45页,共129页,编辑于2022年,星期六3 3字符型字符型#include void main()cout x07operatingt systemn;cout 101 t A 012 ;例例 转义字符示例转义字符示例响铃,等价于 a横向跳一制表符换行第46页,共129页,编辑于2022年,星期六w取值范围:true:真flase:假wC中表示方法:0为假,非 0真4.4.布尔型布尔型(bool)(bool)第47页,共129页,编辑于2022年,星期六w字符串并不是C的基本数据类型。w字符串常量是包含在”中的字符序列,以数据形式存放;存放时,自动在字符串尾部添加一个空字符0作为结束符。w注意”A”和A的差别w在string.h中定义一系列处理字符串的函数,在第5章讲解5 5字符串字符串 第48页,共129页,编辑于2022年,星期六w空值类型表示没有、无效和含义w和NULL(空)区分开发:NULL表示不知道是什么的含义6 6空值类型空值类型(void)(void)第49页,共129页,编辑于2022年,星期六3.4 3.4 3.4 3.4 变量和常量变量和常量程序使用内存空间需要申请,申请的方式是通过在程序中定义常量和变量来进行的既能读又能写的内存对象,称为变量;若一旦初始化后不能更改的对象则称为常量。第50页,共129页,编辑于2022年,星期六3.4.1 变量定义变量定义已定义类型 变量是存储单元 变量定义:申请指定类型的存储空间,并以指定标识符命名变量定义形式:类型类型 标识符,标识符,标识符;标识符表第51页,共129页,编辑于2022年,星期六3.4.1 变量定义变量定义变量定义例子:int x;int wordCut,Radius,Height ;double FlightTime,Mileage,Speed ;变量定义同时可以赋初始值类型 标识符=常量,标识符=常量,标识符=常量;第52页,共129页,编辑于2022年,星期六3.4.2 访问变量访问变量内存单元由操作系统按字节编号,称为地址。一个变量占有内存的第一个字节的地址称为对象的地址可以通过变量名或地址访问变量的值第53页,共129页,编辑于2022年,星期六3.4.2 访问变量访问变量int a 0X0066FDF4double b 0X0066FDEC例如,例如,有说明:有说明:int a;double b;内存分配内存分配变量a的地址变量b的地址第54页,共129页,编辑于2022年,星期六1.名访问名访问 对于变量,名访问就是访问变量的内容 访问形式分为“读”和“写”例如:例如:int a,b;a =10;b =20;a =a+b;第55页,共129页,编辑于2022年,星期六1.名访问名访问 对于数据单元,名访问就是操作对象的内容 访问形式分为“读”和“写”例如:例如:int a,b;a =10;b =20;a =a+b;int aint b建立内存对象建立内存对象第56页,共129页,编辑于2022年,星期六例如:例如:int a,b;a =10;b =20;a =a+b;1.名访问名访问 对于数据单元,名访问就是操作对象的内容 访问形式分为“读”和“写”写写操操作作int aint b1010第57页,共129页,编辑于2022年,星期六1.名访问名访问 对于数据单元,名访问就是操作对象的内容 访问形式分为“读”和“写”例如:例如:int a,b;a =10;b =20;a =a+b;写写操作操作int aint b102020第58页,共129页,编辑于2022年,星期六1.名访问名访问 对于数据单元,名访问就是操作对象的内容 访问形式分为“读”和“写”例如:例如:int a,b;a =10;b =20;a =a+b;读读操作操作int aint b1020+2010第59页,共129页,编辑于2022年,星期六1.名访问名访问 对于数据单元,名访问就是操作对象的内容 访问形式分为“读”和“写”例如:例如:int a,b;a =10;b =20;a =a+b;写写操作操作int aint b1020+201030第60页,共129页,编辑于2022年,星期六2.地址访问地址访问 程序被编译后,系统对已声明对象保存一张名表,登记对象的属性 C+允许通过名或地址(并根据类型)访问对象 例如,例如,有说明:有说明:double b;名字名字b所标识的所标识的浮点型对象浮点型对象第61页,共129页,编辑于2022年,星期六2.地址访问地址访问 程序被编译后,系统对已声明对象保存一张名表,登记对象的属性 C+允许通过名或地址(并根据类型)访问对象 例如,例如,有说明:有说明:double b;地址地址0X0066FDEC所指的浮点型对象所指的浮点型对象第62页,共129页,编辑于2022年,星期六2.地址访问地址访问 程序被编译后,系统对已声明对象保存一张名表,登记对象的属性 C+允许通过名或地址(并根据类型)访问对象 例如,例如,有说明:有说明:double b;int a;名字名字名字名字a a所标识的所标识的所标识的所标识的整型对象整型对象整型对象整型对象第63页,共129页,编辑于2022年,星期六2.地址访问地址访问 程序被编译后,系统对已声明对象保存一张名表,登记对象的属性 C+允许通过名或地址(并根据类型)访问对象 例如,例如,有说明:有说明:double b;int a;地址地址地址地址0X0066FDF40X0066FDF4所指的整型对象所指的整型对象所指的整型对象所指的整型对象第64页,共129页,编辑于2022年,星期六2.地址访问地址访问 程序被编译后,系统对已声明对象保存一张名表,登记对象的属性 C+允许通过名或地址(并根据类型)访问对象 例如,例如,有说明:有说明:double b;取对象取对象b的地址:的地址:&b访问对象访问对象b:*(&b)取址运算符间址运算符取对象取对象b的地址:的地址:&b访问对象访问对象b:*(&b)第65页,共129页,编辑于2022年,星期六2.地址访问地址访问例例 测试对变量、常量的不同访问形式测试对变量、常量的不同访问形式#includevoid main()int a=451;const int MAX=1000;cout a endl;cout (&a)endl;cout *(&a)endl;cout&MAX endl;cout MAX endl;cout *(&MAX)endl;第66页,共129页,编辑于2022年,星期六定义形式定义形式:类型&引用名 =变量名;3.4.2 引用引用 引用说明为变量建立引用名,即别名,并不分配存储空间 引用在定义初始化时与变量名绑定,程序中不能对引用重定义 一个变量的别名,从使用方式和效果上,与使用变量名一致 4.引用引用引用说明符 第67页,共129页,编辑于2022年,星期六3.4.2 引用引用/引用引用int a;int&ra=a;ra 是 a 的别名只能在定义时初始化第68页,共129页,编辑于2022年,星期六3.4.2 引用引用/例例 引用测试引用测试#include void main()int a=2345;int&ra=a;cout a t ra t =!=逻辑运算符!&|位运算符|&赋值运算符=及扩展的复合运算符条件运算符?:逗号运算符,指针运算符*&求字节运算符sizeof强制类型转换符类型分量运算符.-下标运算符其他():new delete3.5.1 运算符运算符 第75页,共129页,编辑于2022年,星期六 单目运算符单目运算符单目运算符单目运算符 运算符运算符 右操作数右操作数例如:例如:-123+500 双目运算符双目运算符双目运算符双目运算符 左操作数左操作数 运算符运算符 右操作数右操作数例如:例如:a*3xy 三目运算符三目运算符三目运算符三目运算符 条件运算:条件运算:操作数操作数1?操作数操作数2 :操作数操作数3例如:例如:a?b:c 3.5.1 运算符按照操作数的个数分类运算符按照操作数的个数分类 第76页,共129页,编辑于2022年,星期六算术运算符w+,-,*,/加、减、乘、除运算四则混合运算中,先算乘除,后算加减,先算左,后算右w%求余运算wSizeof求数据或数据类型占用的存储空间字节数第77页,共129页,编辑于2022年,星期六算术运算符两个整数相除的结果为整数整数运算溢出的问题unsigned short int i=1000*100;cout in;输出不是输出不是100000,而是,而是34464,因为,因为short int能表示的能表示的最大范围是最大范围是655365/3结果是结果是14/5结果是结果是0-11/2结果根据由编译器选择,可为结果根据由编译器选择,可为-5或者或者-6第78页,共129页,编辑于2022年,星期六自增和自减i+,i-i-,+i+i,-i-i +让参与运算的变量加1,-让参与运算的 变量减1 运算符为后缀,先取i的值,然后加/减1 运算符为前缀,先加/减1,然后取i的值第79页,共129页,编辑于2022年,星期六自增和自减自增操作符和自减操作符只能用于整型、字符自增操作符和自减操作符只能用于整型、字符型变量,不能用于常量和表达式型变量,不能用于常量和表达式.自增式和自减式作为独立的表达式,前缀式和自增式和自减式作为独立的表达式,前缀式和后缀式没有区别后缀式没有区别说明:并不推荐使用,特别是自增和自减出现在表说明:并不推荐使用,特别是自增和自减出现在表达式中达式中例:例:5+(a+)(x+y)-错误错误第80页,共129页,编辑于2022年,星期六3.5.3 赋值表达式赋值表达式赋值表达式的作用是把数据值写入变量,修改对象赋值表达式的作用是把数据值写入变量,修改对象的值的值 一般形式为:变量变量 =表达式表达式 赋值操作的操作数类型不同时,以左操作数的数据类型赋值操作的操作数类型不同时,以左操作数的数据类型为准。为准。(int a=2.156)第81页,共129页,编辑于2022年,星期六 赋值运算的优先级很低赋值运算的优先级很低 赋值运算的结果是被赋值变量的值赋值运算的结果是被赋值变量的值例如例如a=b=10;(a=b)=10;3.5.3 赋值表达式赋值表达式第82页,共129页,编辑于2022年,星期六复合赋值运算复合赋值运算 双目算符双目算符 op 的表达式:的表达式:A=A op B 可以缩写成:可以缩写成:A op=Bc=c-kc-=kx=x*(y+8)x*=y+8x=x+3x+=3x=x%3x%=3例:例:3.5.3 赋值表达式赋值表达式第83页,共129页,编辑于2022年,星期六复合赋值运算复合赋值运算+=+=-=-=*=*=/=/=%=%=&=&=|=|=C+C+提供的提供的1010个复合赋值运算符:个复合赋值运算符:用于位运算3.5.3 赋值表达式赋值表达式双目算符双目算符 op 的表达式:的表达式:A=A op B 可以缩写成:可以缩写成:A op=B第84页,共129页,编辑于2022年,星期六3.5.4 逻辑表达式逻辑表达式 逻辑表达式用于判断运算。逻辑表达式的值只有两个:表达式 成立 为 true(1)表达式 不成立 为 false(0)表达式求值过程中,非0值都作为逻辑真。构成逻辑表达式的运算符有关系运算符和逻辑运算符。第85页,共129页,编辑于2022年,星期六关系运算符关系运算符w,=,b&b c);a大于b,并且b大于cw|或运算(a b|b c);a大于b,或者b大于cw!求反(!a);如果a是0,结果非0;如果a是非0,结果是0并不改变a的值第87页,共129页,编辑于2022年,星期六逻辑与逻辑与逻辑或逻辑或逻辑非逻辑非逻辑运算符逻辑运算符第88页,共129页,编辑于2022年,星期六逻辑真值表:逻辑真值表:逻辑运算符逻辑运算符第89页,共129页,编辑于2022年,星期六逻辑运算的短路求值:逻辑运算的短路求值:E1&E2当表达式当表达式 E1 的值为的值为 0 时,不再对时,不再对 E2 求值求值E1|E2当表达式当表达式 E1 值为值为非非 0 时,不再对时,不再对 E2 求值求值x=y=0;x+|y+;X=y=1;x-&y-;X=y=1;x-&y-;逻辑运算符逻辑运算符第90页,共129页,编辑于2022年,星期六3.5.5 位运算符位运算符 按位与(按位与(&):全):全1为为1,有,有0则则0w运算规则运算规则将两个操作数的每一个位进行逻辑将两个操作数的每一个位进行逻辑与与操作操作w举例:计算举例:计算 3&5 3&5 3 3:0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 5 5:(&)0 0 0 0 0 1 0 1(&)0 0 0 0 0 1 0 13&5:0 0 0 0 0 0 0 13&5:0 0 0 0 0 0 0 1w用途:用途:将某一位置将某一位置0,其它位不变。例如:,其它位不变。例如:将将 char 型变量型变量 a 的最低位置的最低位置 0取指定位。取指定位。例如:有例如:有 char c;int a;取出取出 a 的低字节,置于的低字节,置于 c 中中第91页,共129页,编辑于2022年,星期六3.5.5 位运算符位运算符 按位或(按位或(|):有有1则则1,全,全0为为0w运算规则运算规则将两个运算量的每一个位进行逻辑或操作将两个运算量的每一个位进行逻辑或操作w举例:计算举例:计算 3|5 3:0 0 0 0 0 0 1 1 5:(|)0 0 0 0 0 1 0 13|5:0 0 0 0 0 1 1 1w用途:用途:将某些位置将某些位置1,其它位不变。,其它位不变。例如:将例如:将 int 型变量型变量 a 的低字节置的低字节置 1:a=a|0 xff;第92页,共129页,编辑于2022年,星期六3.5.5 位运算符位运算符 位运算位运算按位异或(按位异或()w运算规则运算规则两个操作数进行异或:两个操作数进行异或:若对应位相同,则结果该位为若对应位相同,则结果该位为 0,若对应位不同,则结果该位为若对应位不同,则结果该位为 1,w举例:计算举例:计算 071052 071:0 0 1 1 1 0 0 1 052:()0 0 1 0 1 0 1 0 071052:0 0 0 1 0 0 1 1第93页,共129页,编辑于2022年,星期六3.5.5 位运算符位运算符 w用途:用途:使特定位翻转(与使特定位翻转(与0异或保持原值,与异或保持原值,与1异或取异或取反)反)例如:要使例如:要使 01111010 低四位翻转:低四位翻转:0 1 1 1 1 0 1 0 ()0 0 0 0 1 1 1 10 1 1 1 0 1 0 1位运算位运算按位异或(按位异或()第94页,共129页,编辑于2022年,星期六3.5.5 位运算符位运算符 w单目运算符,对一个二进制数按位取反。单目运算符,对一个二进制数按位取反。例:例:025:0000000000010101 025:1111111111101010位运算位运算取反取反()第95页,共129页,编辑于2022年,星期六3.5.5 位运算符位运算符 位运算位运算移位移位w左移运算(左移运算()右移后,低位:舍弃右移后,低位:舍弃 高位:无符号数:补高位:无符号数:补0 有符号数:补有符号数:补“符号位符号位”w一起做:一起做:152=第96页,共129页,编辑于2022年,星期六3.5.6 条件表达式条件表达式 E1E1?E2E2 :E3E3其中?:称为条件运算符,是C+中唯一的三目运算符;E1、E2、E3 为表达式。功能:根据 E1 的值,决定计算 E2 或 E3。若 E1 的值为真,条件表达式的值为 E2 的值;若 E1 的值为假,条件表达式的值为 E3 的值。第97页,共129页,编辑于2022年,星期六/例例 计算计算 a+|b|的值的值#include void main()float a,b;cout a b;cout a +|b|=0?a+b:a-b)b?a:b 求求