新 第2章 数据类型与表达式_第1页
新 第2章 数据类型与表达式_第2页
新 第2章 数据类型与表达式_第3页
新 第2章 数据类型与表达式_第4页
新 第2章 数据类型与表达式_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机处理的对象是数据,而数据是以某种特定的形式存在的。2.1C++的数据类型姓名:曼迪年龄:10岁身高:123.4CM文本整数带有小数3直径:24.6CM直径:12742.02KM不同的数据采用不同类型的存储方式::一个二进制位(bit)存储阵列数据的存储方式::8位一个字节(byte)存储阵列数据的存储方式::16位一个字(word)存储阵列数据的存储方式::32位一个字(word)存储阵列数据的存储方式C++中使用的数据类型基本类型整型、字符型、浮点型(实型)、布尔型、空类型构造类型枚举类型、数组类型、结构体类型、共用体类型、类类型指针类型数据类型是所有程序的基础数据类型可以告诉我们:

计算机为数据提供了多大的存储空间

数据代表什么意思

可以对数据执行哪些操作一、整型类型类型标识符字节数值范围备注短整型short[int]2-32768~32767-215~215-1无符号短整型unsignedshort[int]20~655350~216-1整型[signed]int4-2147483648~2147483647-231~231-1无符号整型unsigned[int]40~42949672950~232-1长整型long[int]4-2147483648~2147483647-231~231-1无符号长整型unsignedlong[int]40~42949672950~232-1inta=23;shortintb=45;131、整型数据的表示方法十进制(Decimal)八进制(Octal)十六进制(Hexadecimal)inta=21;inta=021;inta=0x21;输出:21输出:17输出:33整型数据按二进制数形式存储在内存中的存储形式(2个字节)1、整型数据的存储方式十进制50110010二进制0000000000110010高地址字节低地址字节152、有符号数与无符号数无符号数没有符号位,只能表示非负数无符号数类型必须指定为unsigned16有符号数二进制补码表示,首位为符号位指定signed或缺省情况,即为有符号数(1)补码的概念

正数:与原码一致,首位为0

负数:绝对值取反加1,首位为1

零:各位全为0(2)补码举例0000000000110010111111111100110150的原码-50的补码取反加1

1111111111001110shortinti=-50;//占2字节若把负数赋值给无符号数,会出现什么情况?(3)有符号数与无符号数举例intmain(){shortintx=-50;unsignedshortinty;y=x;cout<<“x="<<x<<endl;cout<<“y="<<y<<endl;}1111111111001110-50的补码xy=x;y65486的原码1111111111001110若把负数赋值给无符号数,则把该负数的补码当作无符号数进行处理。3、整型数据的溢出(Overflow)

数据超出了变量能够存储的范围,造成数据丢失或数值改变等。intmain(){shortinta=32767;a=a+1;cout<<"a="<<a<<endl;}0111111111111111+132767的原码1000000000000000整数的环绕特性

一个正数大到了极点就会变成负数;一个负数小到了极点就会变成正数。-32768的补码1、浮点型的表示方法2.2浮点型31.4159a=0.314159e2a=3.14159e1a=31.4159e0a=314.159e-1规范化指数形式以10为底floata=31.4159;floata=3.14159e1;

在程序中不论把浮点数写成小数形式还是指数形式,在内存中都是以指数形式(即浮点形式)存储的。类型类型标识符字节绝对值范围单精度型float43.4×10-38~3.4×1038双精度型double81.7×10-308~1.7×10308长双精度型longdouble81.7×10-308~1.7×103086位有效数字15位有效数字27313029282726252423222120191817161514131211109876543210

指数位尾数位符号位1、浮点数的存储方式ABCD内存中逆序存储:DCBA浮点数123456.0f的转换过程123456.011110001001000000.01.11100010010000000转化为二进制小数点左移16位1.11100010010000000*(2^16)删除最高位的111100010010000000后面用0补够23位11100010010000000000000指数位共8位,可以表示范围是0~255的无符号整数,也可以表示-128~127的有符号整数。但因为指数是可以为负的,所以为了统一把十进制的整数化为二进制时,都先加上127。16+127=143二进制表示为:10001111符号位(整数):0010001111111000100100000000000003130292827262524232221201918171615141312111098765432100100011

1

1

1

1

1

0

0

0

1

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

指数位尾数位符号位01000111111100010010000000000000转化为16进制:47F12000高低位颠倒:0020F147内存中应显示:00315447练习54321.02、浮点型数据的舍入误差由于浮点型变量能够表示的有效数字有限,将有效位以外的数字舍去造成误差。intmain(){floata=123.456741e5;cout<<a<<endl;return0;}浮点数123.456f的转换过程整数部转化为二进制11110110.456转化为二进制十进制小数转化为二进制数方法

乘以2直到没有了小数为止(取整数部分为二进制位)。0.456*2=0.9120.912*2=1.8240.824*2=1.6480.648*2=1.2960.296*2=0.5920.592*2=1.1840.184*2=0.3680.368*2=0.7360.736*2=1.4720.472*2=0.944…取整数部分0111010010…即使超过尾数的最大长度23位也仍有小数!这就是著名的浮点数精度问题。1111011.01110100101111001加上前面的整数部算够24位即可小数点左移6位1.111011011101001011110011.11101101110100101111001*(2^6)删除最高位的111101101110100101111001010000101111011011101001011110016+127=133二进制表示为:10000101

符号位(整数):0转化为16进制:42F6E979高低位颠倒:79E9F642四、字符型charch='A';

只能包括一个字符单引号(′)是定界符占一个字节1、字符型数据在内存中的存储形式存放该字符相应的ASCII代码01000001'A'字符型数据和整型数据可以通用40intmain(){ inti,j; charc1; i='A'+5; j='B'; c1=65+5; cout<<"i="<<i<<''<<"j="<<j<<'\n'; cout<<"c1="<<c1<<endl; return0;}注意:字符型数据只能存放0~255范围内的整数。41将小写字母转换为大写字母。intmain(){ charc1,c2; c1='a'; c2='b'; c1=c1-32; c2=c2-32; cout<<c1<<''<<c2<<endl; return0;}

有些ASCII的字符代表某些操作,不能打印出来,如回车、换行等,可用两种方式表示这些字符。

1)用ASCII码的形式

charre=13;

2)用转义字符

charre=

′\n′;2、转义字符43转义字符

意义ASCII码值(十进制)\a响铃(BEL)007\b退格(BS)008\f换页(FF)012\n换行(LF)010\r回车(CR)013\t水平制表(HT)009\v垂直制表(VT)011\\反斜杠092\?问号字符063\'单引号字符039\"双引号字符034\0空字符(NULL)000\ddd1到3位8进制数所代表的字符\xhh1到2位16进制数所代表的字符可以利用以下代码显示扩展ASCII码:system("chcp437");利用以下代码转回中文显示:system("chcp936");45

编译系统在见到字符“\”时,会接着找它后面的字符,把它处理成一个字符,在内存中只占一个字节。

intmain(){ inta=1; cout<<a<<""<<a<<endl; cout<<a<<"\t"<<a<<endl; return0;}intmain(){ cout<<"c:\tc\tc"<<endl; return0;}intmain(){ cout<<"c:\\tc\\tc"<<endl; return0;}五、变量的定义在程序运行期间其值可以改变的量称为变量。inta;floatb;doublec;chard;变量类型变量名变量有一个名字,即标识符变量在内存中占据一定的存储单元变量占据存储空间的大小由其类型决定程序使用变量名表示这个变量所占据的存储单元里存储的数据的值变量要“先定义,后使用”481、变量的命名规则

只能由字母、数字、下划线(‘_’)组成;第一个字符必须为字母或下划线;

C++语言标识符是大小写敏感的;不要与关键字、系统函数名和类名重复。合法的变量名:

sum,average,total,day,month,Student_name,tan,BASIC,li_ling不合法的标识符和变量名:

M.D.John,$123,#33,3G64,Lingli,C++,Zhang-ling,U.S.A.50asmautobreakcasecatchcharclassconstcontinuedefaultdeletedodoubleelseenumexternfloatforfriendgotoifinlineintlongnewoperatoroverloadprivateprotectedpublicregisterreturnshortsignedsizeofstaticstructswitchthistemplatethrowtrytypedefunionunsignedvirtualvoidvolatilewhileC++常用的关键字:

标识符应当直观且可以拼读,可望文知意,不必进行“解码”。标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词用词应当准确。

例如:不要把CurrentValue写成NowValue。

单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们通常可用作函数内的局部变量。

标识符的长度应当符合“min-length&&max-information”原则。maxvalmaxValueUntilOverflow

例如Windows应用程序的标识符通常采用“大小写”混排的方式,如AddChild。而Unix应用程序的标识符通常采用“小写加下划线”的方式,如add_child。别把这两类风格混在一起用。

命名规则尽量与所采用的操作系统或开发工具的风格保持一致。例如:intx,X; //变量x与X容易混淆voidfoo(intx); //函数foo与FOO容易混淆voidFOO(floatx);

程序中不要出现仅靠大小写区分的相似的标识符。例如:floatvalue;floatoldValue;floatnewValue;

变量的名字应当使用“名词”或者“形容词+名词”。如Value1,Value2等,除非逻辑上的确需要编号。

用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。例如:int minValue;int maxValue;int SetValue(…);int GetValue(…);

尽量避免名字中出现数字编号。2、为变量赋初值可以在定义变量时指定它的初值。floata=3.14;floatb=3.14*2.3*2.3;也可以是表达式floata;a=3.14;常规方式变量未赋初值即使用,会有什么后果?intmain(){inta;cout<<"a="<<a<<endl;return0;}各次运行情况可能不同原因是什么?59若变量未赋初值即使用,则该变量的初值是一个不可预测的值。3、访问变量

内存单元由操作系统按字节编号,称为地址。对象在内存中第一个字节的地址称为对象的地址。0X0066FDF40X0066FDEC变量a的地址变量b的地址inta;doubleb;由类型符double解释存储数据由类型符int解释存储数据取对象b的地址: &b取址运算符六、符号常量和常变量符号常量是以标识符形式出现的常量。#include<iostream>usingnamespacestd;#definePRICE30intmain(){ intnum,total; num=10; total=num*PRICE; cout<<"total="<<total<<endl; return0;}不加分号constinta=3;常变量表示程序运行期间值不能改变的变量。常变量不能被赋值。constinta;a=3;定义常变量时必须同时对它初始化。又称只读变量65符号常量和常变量的区别

符号常量用一个符号代替一个字符串,在预编译时把所有符号常量替换为所指定的字符串,它没有类型,在内存中并不存在以符号常量命名的存储单元。常变量具有变量的特征,它具有类型,在内存中存在着以它命名的存储单元。与一般变量惟一的不同是指定变量的值不能改变。

为什么要使用常量?不使用常量所引起的麻烦:(1)程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。(2)在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。(3)如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。67尽量使用含义直观的常量来表示程序中多次出现的数字或字符串。七、C++的运算符算术运算符+-*/%++--关系运算符><==>=<=!=逻辑运算符!&&||位运算符<<>>~|^&

赋值运算符=及扩展的复合运算符条件运算符?:逗号运算符,指针运算符*&求字节运算符sizeof强制类型转换符(type)分量运算符.->下标运算符[]其他()newdelete691、基本的算术运算符运算符名称举例说明+正值运算符(正号)+b值不变-负值运算符(负号)-d取相反数+加法运算符a+3加法-减法运算符c-4减法*乘法运算符a*3乘法/除法运算符c/d除法%模运算符e%4求余数、取模702、

算术表达式

用算术运算符和括号将运算对象连接起来的、符合C++语法规则的式子,称C++算术表达式。运算对象包括常量、变量、函数等。a*b/c-1.5+'a'71C++语言规定了运算符的优先级和结合性。圆括号()具有最高的优先级72直接舍去商的小数部分采取“向零取整”两个整数相除,结果也为整数注意%运算符的两个操作数都必须是整数模运算有什么作用?分解数字733

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论