版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
复习2:数据类型和表达式本章主要内容数据类型和声明(typesanddeclarations)运算符和表达式(operatorsandexpressions)
数据类型(Datatypes)(1)基本内建类型(built-intypes)布尔型(bool),也称逻辑型
字符型(char)整型(int)浮点型(floatanddouble)其它:void,枚举,typedef,引用(2)自定义类型(userdefinedtypes)结构、类、类模板等等
布尔型(boolean)只有两种取值:true和false用来表示逻辑运算的结果表示函数执行是否成功表示某个条件是否满足隐式(implicitly)转换当转化为整数时,true变成1,false变成0从整数转换过来的时候
//布尔型的用法boola=true;boolb=(x==y);//表示函数执行是否成功boolSave(char*FileName);//表示某个条件是否满足boolgreater(inta,intb){return(a>b);}
布尔型的隐式(implicitly)类型转换从bool转换成整数true变成1false变成0从整数转换成bool非0的变成true0变成false
//布尔型与整形的转换boola=7;
//a=trueboolb=0;
//b=false//inti=true;
//i=1intj=false;
//j=0
字符型(char)用来表示字符,以单引号表示占1个字节(8位),能存储256个值ASCII码表写不出来的字母怎么办?特殊的转义字符(表2-3)ASCII表以外的字符怎么办?(wchar_t,自己查资料)
//字符型的用法charname=‘M’;//不能显示的字符chara=‘\103’;
//8进制charb=‘\x43’;
//16进制//转义字符chara=‘\n’;
字符型的范围(可以当整数用)有符号的(char)-128~127chara=‘\X80’;//a=?无符号的(unsignedchar)0~256unsignedchara=‘\X80’;//a=?
字符型的范围字符型本身可以当整数用 inta=‘a’;//a=97 inta=‘b’+21;//a=119char和int都有符号之分,涉及到unsigned的时候要特别小心 unsingedinta=‘\x81’;//a=?
整型(int)表示整数有三种类型shortintlong有符号和无符号的
//整数的用法intyear=2012;//不同的类型shortage;shortintage;intyear;
longyear;
longintyear;//符号和无符号unsignedintage=24;
整型(int)的范围有符号的:short16位-32768~32767int16位-32768~32767long32位-231~+231-1无符号的unsignedshort16位0~65536unsignedint
16位0~65536unsignedlong
32位0~+232
浮点型(floatanddouble)表示实数有两种类型float单精度32位4字节double双精度64位8字节
//浮点型的用法floatpi=3.14;doublepi=3.1415926;//隐式转换floatpi=3;doublepi=3;
浮点型的范围float32位±1038之间,7位有效数字double64位±10308之间,14位有效数字floatPi=3.14159265;floatPi2=3.14159266;
//浮点型的范围(7位有效数字,8位有效)//为什么?自己查资料floatPi=3.14159265;floatPi2=3.14159275;//比较大小,is_big=?boolis_big=(Pi2>Pi);//输出,输出的结果是什么?cout<<Pi<<endl;
几种数据类型的范围表(表2-2)数据类型符号数据范围字符char-128~127unsignedchar0~255整数short(16位)-32768~32767(0~65536)int(16位)-32768~32767(0~65536)long(32位)±231之间浮点数float(32位)±1038之间,7位有效数字double(32位)±10308之间,14位有效数字
空值型(无类型void)修饰函数,表示无返回值修饰指针,表示无类型指针
//修饰函数voidhello(char*Name);floatPi2=3.14159275;//修饰指针void*p=null;什么是声明(declaration)?y=x+f(a);变量和函数在使用之前需要声明声明告诉编译器名字(变量名和函数名)代表的是哪种类型的数据
//声明变量floaty;floatx;inta=10;//声明函数intf(inta);//y=x+f(a);
声明的结构[描述符]+类型符+名字+[初始化] constfloatPi=3.14159;“名字”部分严格应称“声明符”(declarator)描述符和初始化部分是可选的:floatPi;intage;
//声明变量charch;constdoublepi=3.14159;boolis_ok=true;//声明函数intsum(inta,intb);doublesqrt(doublea);boolsave(char*fileName);
声明的结构[描述符](可选)类型符名字(标识符)[初始化](可选)
描述符(specifier)描述符根据需要,不是必须的。常用的描述符:const声明一个常量staticextern
名字(name)或标识符(identifier)名字用来标识变量、函数、类等注意事项:以英文字母和下划线开头,由英文字母,数字和下划线构成关键字不能作标识符长度有一定的规定(与编译器相关)
名字(name)或标识符(identifier)有效的名字_xpwindownumbertotal_22无效的名字3g[abc+efgthis
常量(字面文字量)数值字符字符串
运算符operator算术运算符arithmeticoperators关系运算符relationaloperators逻辑运算符logicaloperators赋值运算符assignmentoperators条件运算符conditionaloperators逗号运算符commaoperator位运算符bitwiseoperators
算术运算符和表达式取模运算%要求操作数都是整数 7%2;//正确 3.2%2;//错误除法/两边都是整数的时候是整除a=5/2;//a=2a=3/2;//a=1算术运算符和表达式除法注意分母不能为0 a=7/0;//计算错误
//注意下面的情况 c=......; a=b/c;//c=0?//++--运算符inta,i=5;a=i++;a=++i;a=j--;a=--j;//b=a*1.0/3;//b=2+3*4.0;表达式(expression)?什么是表达式?常量就是一个表达式由操作数和操作符连接组成的也叫表达式任何表达式都有一个值//常量是表达式5‘A’3.1//变量也是表达式aiis_ok//变量(常量)和操作符连接组成a+bb/2.03%2//表达式和操作符组成(a+1)+(b%2)a+b*3-4赋值运算符和表达式赋值运算符
= +=-=
*=/=%=赋值表达式a=20;//把“20”这个值赋给变量aa=i;//把变量i的值赋给变量a复合赋值运算+=-=
*=/=%=
a+=20;//a=a+20;a-=20;//a=a-20;a*=b;//a=a*b;a/=b;//a=a/b;注意b不能为0a%=b;//a=a%b;a,b都必须为整数//赋值表达式i=5;a=3.2;b=‘A’;//i*=3;//i=?a+=4.2;//a=?b%=5;//b=?//当”=“两边类型不一致,隐式类型转换inti=5.5;//i=?floata=3;//a=?charch=97;//ch=?inti=3/2;//i=?inti=3.0/2;//i=?floata=3/2;//a=?boolis_ok=10;//is_ok=?boolis_ok=0.3;//玩火,不要这样写//复合赋值语句intx=10,m=10;constinty=12;x+=15;//x=?y-=5;//y=?y为常量,编译错误//intm=10;//m=?m/=2.3;//m=?赋值表达式的值赋值表达式的值是
赋值之后的值a=b=20;//即a=(b=20);a=b=c=20;//即a=(b=(c=20));a=1;b=2;a=a*=b;//也就是a=(a*=b);//现在ab的值为多少?
错误的赋值给常量赋值constinta=20;
a=20;//错!a是常量2=3+5;//错!2是常量给表达式(值)赋值(a+b)=21;//错!a+b是值关系运算符>大于>=大于等于<小于<=小于等于==等于!=不等于关系表达式关系运算符和操作数组成,如
a<ba>=b1<=2关系表达式的结果是true或false
//关系表达式a=2;b=2;a<b//(a<b)=?a<=b//(a<=b)=?a==b//(a==b)=?a!=b//(a!=b)=?//关系表达式和赋值运算boolis_ok=(a>=b);boolis_ok=(3!=2);
逻辑运算符&&逻辑与||逻辑或!逻辑非逻辑表达式,如A&&B操作数要是bool型,通常是关系运算的结果逻辑表达式的结果是true和false
逻辑表达式的结果A&&B
A和B都是true的时候结果为true,否则结果为flaseA||BA和B中间任何一个为true,结果就为true。两个都为false的时候,结果才为false
!A
A如果为true,结果就是false;A如果为false,结果就为ture
//逻辑表达式的结果boola=true,b=false;boolc;c=a&&b;//c=?c=a||b;//c=?c=!a;//c=?//逻辑表达式要求操作数是bool型c=!3;//c=?c=3||0;//c=?//逻辑运算和关系运算的复合boolis_ok;inta=3;is_ok=(1<a)&&(a<=3);is_ok=(0<a)&&(a>=4);is_ok=(0<a)||(a>4);is_ok=!(a>3);//x大于1但是x不等于3怎么说?(x>1)&&(x!=3)//复杂的逻辑表达式,!优先级最高,&&和||同级,从左向右算boola=true,b=false;boolc;c=!a&&b&&!a||b//c=?//很坑爹的写法,不要这么写条件表达式(也叫?:表达式)
表达式1?
表达式2:
表达式3表达式1一般是一个关系运算
这个表达式的值当表达式1为true的时候,值为表达式2的值;当表达式1为false的时候,值为表达式3的值;
a>=b?a:b//这个式子在干什么?
//求两个数中间的最大值a>b?a:b//求绝对值a>0?a:-a//赋值intmin=(a>b?b:a);逗号表达式
表达式1,表达式2,表达式3,...逗号表达式就是用逗号分开的多个表达式
a=15,25/5,false逗号表达式的值就是最后一个表达式的值
b=(a=15,25/5,false);//b=?//逗号表达式intx=5,y=10;y=(x=20,x*6);//y=?//很坑爹的写法,考试就是喜欢考这样的
位运算符
~
按位取反~A
<<
左移A<<2>>
右移A>>2&
按位与A&B
^
按位异或A^B
|
按位或A|B回忆一下取反~aa是1,结果就是0;a是0,结果就是1与a&ba和b都是1,结果就是1;否则为0异或a^ba和b不一样,结果就是1;一样就是0
或a|ba和b其中有一个是1,结果就是1;ab都为0,结果才为0
~
按位取反~A运算过程:A的二进制位上面原来是1的变成0,原来是0的变成1比如A=4(int)A=0000000000000100~A=1111111111111011
//~A=?计算机基础课里面学过的<<
左移A<<b运算过程:A的二进制所有位上的数字向左移动b位比如A=4(int)A=0000000000000100A<<2=0000000000010000>>
右移A>>b运算过程:A的二进制所有位上的数字向右移动b位比如A=4(int)A=0000000000000100A>>2=0000000000000001&
按位与A&B运算过程:A和B每一个对应的二进制位做“与”运算比如A=4,B=8(int)A=0000000000000100B=0000000000001000A&B=0000000000000000^
按位异或A^B运算过程:A和B每一个对应的二进制位做“异或”运算比如A=5,B=9(int)A=0000000000000101B=0000000000001001A^B=0000000000001100|
按位或A|B运算过程:A和B每一个对应的二进制位做“或”运算比如A=5,B=9(int)A=0000000000000101B=0000000000001001A^B=0000000000001101//2_14intx=3,y=4,m,n;m=x>>2;//m=?n=y<<1;//n=?cout<<(x&y)<<endl;cout<<(x|y)<<endl;cout<<(x^y)<<endl;x=~x;//x=?y=~y;//y=?常用的其它C++编译器MinGWDev-C++CodeBlocks本章零星内容wchar_t和longdouble类型变量、常量和const关键字++和--运算符操作符的优先级问题wchar_t和longdouble类型wchat_t宽字符型,(最小)16位用于存储超过256个字符的字符集中的字符,比如中文字符longdouble长双精度型,(最小)64位用于存储精度高的数字,用于特定场合
//宽字符类型wchar_ta=‘A’; wchar_tb=‘\Xfffe’;//长双精度型longdoubleage=24.0L;变量(variable)变量在内存中对应一小块有名字的存储区变量的名字称为该变量的标识符(identifier)charname=‘M’inta=10;变量(variable)变量必须有确定的类型类型决定了存储区的大小(多少字节)从而也决定了变量能存储的值的范围类型决定了变量可以使用什么操作符“strongstatictypelanguage”必须有类型,类型一旦确定就不能修改进行赋值时,两边类型不一样,必须先转换再赋值//类型确定后就不能修改inta=10;doublea=10.0;//编译出错//类型转换inta=10.0;//double转成int后,赋值给ainta=int(10.0);//显式转换//注意赋值语句的右边不要超限
chara=200;//a=-56 shortb=80000.0;
//b=14464
变量(variable)变量对应的内存是可操作的变量可以修改,重新赋值变量可以各种运算通过地址(变量名)进行操作inta=10;a=20;常量(constant)字面常量(literalconstant)常变量(constantvariable)字面常量(literalconstant)字面常量‘M’103.14“Hello”字面常量是一个值,因此可以使用,但是不能修改(重新赋值)
name=‘M’;floatPi=3.14;10=10;//试图重新赋值,错误!整数字面常量三种表达方式十进制
普通写法100八进制以零开头0100十六进制
以
0x或0X(数字0和大小写字母x)类型默认int或者long显式指定后面跟字母L或l表示long后面跟字母U或者u表示unsigned//整数表达方式10001440X640x64//默认类型10//10默认是int(16位)100000//int存不下,默认是long(32位)//显示确认10L//long100000uL//unsignedlong
0Xfffffu//unsignedlong(int存不下)浮点型字面常量类型默认double显式指定后面跟字母L或l表示longdouble后面跟字母F或者f表示float//浮点型字面常量//默认类型1.0//1.0默认是double(64位)//显式确认类型1.0F//float
1.0L//longdouble(至少64位)//类型标识的使用//没有必要的inta=100L;
floatf=1.23F;//一般是是为了程序的可读性而显式指定类型//其它类型的字面常量‘M’//charL’M’//wchar_t,知道就行”Hello”//字符串,后面再讲
true//bool型
false//bool型常变量(constantvariable)常变量:用const修饰的变量constdoublePi=3.1415926;常变量也是一个值,可以使用但是不能修改(重新赋值) constinta=100;floats=3.14*a;a=100;//试图重新赋值,错误!const关键字修饰变量:表示变量为常数constdoublePi=3.1415926;修饰函数:对函数有特殊的限制 constintsum(inta,intb); intsum(inta,intb)const;修饰指针、引用等++和--放在变量的左边:先自加后取值i=100;inta=++i;//a=101i=101放在变量的右边:先取值后自加 i=100; intb=i++;
//b=100i=101//++和--,设i=1,j=1a=i++*j++;//a=?a=i++*++j;//a=?a=++i*++j;//a=?a=++i*j++;//a=?//这里*左右两边的计算顺序C++并未做定义,因此实际编程中不能这么写。前自增(减)和后自增(减)的区别++i等价于i+=1等价于i=i+1y=++i;等价于y=(i=i+1);++i返回的是变量i,且i=i+1;i++等价于(t=i,i+=1,t)t是一个临时变量 y=i++;等价于y=(t=i,i+=1,t)
i++返回的是一个值t,且t=i++和--都是针对变量的//++i返回的是变量i,设i=1a=(++i)++;//a=?a=(++i)=5;//?i=5编译无错a=++++i;//a=?a=3
++(a+b);++2;//?编译都出错//i++返回的是值t(t=i),设i=1a=++(i++);//编译出错(i++)=5;//编译出错a=(i++)++;//编译出错a=(a+b)++;2++;//编译出错//++和--,设i=1a=i++*i++;//a=?a=i++*++i;//a=?a=++i*++i;//a=?a=++i*i++;//a=?//纠结于上面的语句是完全没有意义的//这样的写法唯一的作用就是可以用来鄙视!优先级(Precedence)复合表达式(CompoundExpression) 6+3*4/2+2a>1&&a<=12复合表达式需要判断操作符的优先级,优先级高的先结合,优先级低的结合优先级从高到低(A级)A1后自增,后自减(a++a--)A2下面优先级相同sizeof前自增,前自减(++a--a)按位取反~逻辑否!正、负号+-优先级从高到低(B级)B1代数运算(*/%)高于(+-)B2位移(
<<>>)B3关系运算(<<=>>=)高于(!=
==)B4位运算&高于^高于|B5逻辑运算&&高于||优先级从低到高(C级)C1条件运算符?:C2赋值运算
(=+=-=*=/=%=)C3逗号运算符,圆括号(Parentheses)圆括号凌驾于优先级之上
ParenthesesOverridePrecedence!不清楚优先级的时候,用圆括号TrustParentheses,notyourmemory!
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 11.1 创新思维的含义与特征课件(共25)统编版高中思想政治必3
- 一级质控护理安全检查标准
- 糖尿病妊娠期护理
- 社区急救护理
- 系统红斑狼疮患者的家庭护理技巧
- 急性脑出血患者的预防及护理
- 广东省深圳市宝安区龙田学校2026年八年级物理下学期期中学情调研
- 2026年养老院消毒服务合同协议
- 2026年运输车辆租赁合同(1篇)
- 2026年民航运输合同(1篇)
- 中国抑郁障碍防治指南(2025版)
- 机械制图 第3版 课件 第六章 机件常用的表达方法
- 钢琴老师签订合同协议
- 硫酸镁湿敷操作流程规范
- 2024年秋国开新时代中国特色社会主义思想概论形考作业及答案
- 工地试验室管理标准化指南
- 中央空调合同(标准版)
- 花卉的秘密课件-2024-2025学年湘美版(2024)初中美术七年级下册
- 西石大知识产权法教学案例
- 客运稽查考试题及答案
- 工程报告制度管理办法
评论
0/150
提交评论