一、基本语言元素二、基本数据类型三、算术负运算与补码转换_第1页
一、基本语言元素二、基本数据类型三、算术负运算与补码转换_第2页
一、基本语言元素二、基本数据类型三、算术负运算与补码转换_第3页
一、基本语言元素二、基本数据类型三、算术负运算与补码转换_第4页
一、基本语言元素二、基本数据类型三、算术负运算与补码转换_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

一、基本语言元素

二、基本数据类型

三、算术负运算与补码转换第二章基本元素、类型和概念1一、基本语言元素

1.C/C++中的字符集

每一种语言有各自的基本元素。C/C++语言的词法分析建立在对基本元素的扫描、上下文匹配和排列组合之上。基本类型是C++作为强类型语言处理各种数据的基本尺度。通过基本元素和类型完成文字符号的转换以及源头处的求值计算。关于基本元素的约定就形成词法规定,由此形成定义、声明、表达式、语句和函数进而建立完整的程序。2C/C++中的字符集由下列字符构成:

a.

26个大小写英文字母:a~z,A~Z

b.

10个数字字符:0~9

c.

标点符号:空格~!#%^&*()_-+={}[]:;'",<>./?\|C/C++中的标点符号对编译器而言具有词法意义,某些标点符号为C/C++的运算符或对预处理器有重要意义。标点符号[]、()和{}必须成对出现。C/C++中的字符集一共91个字符,实际上包含可键入的字母,只有三个例外它们是:@、$、`。32.语言符号语言符号是C/C++语言有意义的最小单元.

a.空白字符:空格、水平制表、换行、回车、换页、纵向制表和换行符都称为空白字符

b.标识符:所有的名称在索引点前必须先有效的说明

c.关键字:关键字是系统预定义的保留标识符

d.标点符号和分隔符;

e.文字常数;

f.运算符;

4(1)空白字符空格、水平制表、换行、回车、换页、纵向制表(verticaltab)和换行(newline)符都称为空白字符(white-space),它们具有相同的功能即作为打印页上单词和行之间的空白。通过空白字符和其它语言符号,例如运算符和标点,从而对语言符号进行定界。对代码进行词法分析时,编译器忽略空白字符,除非它们作为分隔符或字符串的组成成分。5

(2)标识符所有的名称在索引点前必须先有效的说明,否则是无效的标识符。标识符是程序员引入的有效的名称,是编译器许可的名称。对象名、变量名或函数名,结构名、类类型名、枚举名、联合名或成员名,typedef名称、标号名、宏名、宏形参名、形参名等遵循标识符的命名规定。6标识符或名称的命名规定如下:

a.标识符的字符序列仅由下划线“_”、数字0~9与26个大小写字母a~z,A~Z构成。

b.标识符的首字符必须是大写字母或小写字母或一个下划线“_”而不能是数字开头。

c.标识符不能与关键字使用一样的拼写和大小写方式。

d.标识符对大小写字母敏感,即大写字母或小写字母代表不同的名称。

例如:和是不同的名称。标识符中含有关键字是合法的,例如pint是一个合法的标识符,尽管它包含了关键字int。而1ab,&x,#ddd,9y不是有效的标识符。7(3)关键字关键字是系统预定义的保留标识符。它们不能再定义用作程序中的标识符。关键字是语言标准的制定者提供给用户使用的举足轻重的语言单词。ANSIC89规定32个保留字,C++在此基础上增添了以斜体表示的28个关键字。8以下是这些关键字和其主要作用的非严格归类:

1.基本类型charintfloatdoublelongshortsignedunsignedbool

2.自引入类型classenumstructunion

3.内存大小和类名声明sizeoftypedef

4.存储属性autoregisterstaticextern

5.数据冻结和变动constvolatilemutable

6.逻辑真假falsetrue

7.运算符和内存操作operatornewdeletethis9

8.流程语句的控制trythrowcatchifelsedowhileforcontinueswitchcasedefaultbreakgotoreturn

9.成员访问控制privateprotectedpublicfriend

10.函数修饰词voidinlinevirtualexplicit

11.模板和名称空间templatetypenamenamespaceusing

12.类型转换运算const_castdynamic_castreinterpret_caststatic_casttypeid10(4)分隔符分隔符是用来分隔单词或程序正文的,它用来表示某个程序段的结束和另一个程序段的开始,或者增加程序的可读性。常用的分隔符如下所述:a.圆括号()圆括号用于增加程序的可读性以及提高表达式运算的优先级。

b.空格符常用来作为名称和名称或运算符之间的分隔符。

c.逗号,逗号用来作为定义多个变量之间的分隔符;或者用来作为函数的多个参数之间的分隔符。逗号还可以用作运算符。11

d.分号;用于循环语句中for关键字后面括号中三个表达式的分隔,用于终止分号前的语句。花括号{}后的分号表示一个声明的结束。

e.冒号:用来作语句标号与语句之间的分隔符和switch语句中关键字case与语句序列之间的分隔符。用于表示继承的上下关系、构造函数的冒号语法和访问作用界定。

f.花括号{}用来构造程序,形成程序块的层次体系。

g.省略号...,三个圆点构成的省略号用来声明函数的可变参数。12(5)文字常数文字常数是在程序中直接使用字符序列表示的数据,文字常数亦简称为常数或文字。文字常数有整型常数、浮点常数、字符常数、字符串常数。13二、基本数据类型

数据状态的数学描述形成数据结构,数据的操作是对数据的状态进行改变,通过特定的操作步骤数据从一种状态变成另一种状态,这些操作步骤就形成一套算法,因此程序是由数据结构与建立其上的相应算法构成的。不同的数据结构对应不同的算法,这是所有计算机语言共有的特征。本课件用type或T,T1,T2,Tn等代表类型名。type或T1,T2可以是char,short,int,long等整型和float,double,longdouble浮点型或结构名,联合名,枚举名和类类型名等,它们可先通过struct,class,enum,union或Typedef等声明。14数据类型基本数据类型指针类型type*(含void*)引用类型type&(无void数据更无void&数据)枚举类型enum(枚举常数为有限个int型常数)集合数据类型数组类型array[]结构类型struct联合类型union类类型class整型intshortlong字符型char(属于1字节的整型)单精度浮点型float实型双精度浮点型double长双精度浮点型longdouble布尔逻辑型bool15类型名type说明长度数据范围bool布尔逻辑型1true(1)false(0)char字符型l-128~127(0~255)unsignedchar无符号字符型10~255signedchar有符号字符型1-128~127[signed]short[int]有符号短整型2-32768~32767unsignedshort[int]无符号短整型2-32768~32767[signed]int有符号整型2/4-32768~32767unsigned[int]无符号整型2/40~65535[signed]long[int]有符号长整型4-2147483648~2147483647unsignedlong[int]无符号长型型40~4294967295float浮点型43.4*10e-38~~3.4*10e38double双精度型81.7*10e-308~~1.7*10e308longdouble长双精度型8/10至少与double类型同16描述数据的状态首先要获得数据的类型,通过引入变量的概念来确定数据的状态。变量是存储信息的单元,它对应于某个内存空间。变量名代表其存储空间,程序能在变量中存储值和取出值。在定义变量时,说明的变量名称和数据类型(如int)告诉编译器要为变量分配多少内存空间,以及变量中要存储什么类型的值。内存单元的单位是字节。

C++是一门强数据类型的语言,每一种数据一般都严格地对应确定的数据类型。C/C++的数据类型有基本数据类型和非基本数据类型之分。基本数据类型是C/C++内部预先定义的数据类型,非基本数据类型包括指针、数组和结构以及类类型等,非基本数据类型也称用户引入的数据类型。17基本数据类型有:char(字符型)、int(整型)、float(单精度浮点型)和double(双精度浮点型)。在ANSIC++中,还有bool(布尔型).bool类型的变量其结果值用真true假false表示,true就是1,false就是0。关键字char、int、float、double和bool等为基本数据类型的类名。类名不占内存空间。关键字void具有特殊的含义,因为没有void型的数据,只有void*型的指针。除上述基本数据类型外,还有一些类型修饰符,它用来改变基本类型的意义。修饰符有1ong(长型符)、short(短型符)、signed(有符号)和unsigned(无符号)。18short只修饰int,shortint可省略为short,long修饰int和double,1ongint可省略为1ong,一般表示4个字节,修饰longdouble时,一般表示8或10个字节。unsined和signed能修饰char,short,int和long。数据类型确定了数据所占内存空间大小,也确定了数据的范围。数据类型的数域范围记录在头文件limits.h和float.H中。int类型必然不小于short类型,不大于long类型,在16位系统里是2个字节长,32位系统里为4个字节长。整数类型包括char,short,long,signed,unsigned等。枚举常数和当作右值使用的枚举变量可视为int类型看待。19float类型是4字节的浮点数。double是8字节的浮点数,也是32位浮点数学协处理器进行表达式运算的标准类型,double类型是浮点数的缺省类型,float类型的数据一般会转换到double类型的数据进行运算。浮点类型包括float,double和longdouble类型。longdoulbe类型表示浮点处理器的幕后精度和数据范围的扩充优化处理,当程序员感到64位double内存不足以处理符点数的运算时,就设置longdouble变量。以便编译器启动80位的内部临时运算寄存单元。20微软编译器的longdouble变量只占8字节的内存,但longdouble和double是不同的数据类型。字符型整型浮点型统称为算术类型。这样数据的状态通过变量来索引,变量由这里介绍的类型名引入,通过定义语句分配内存。例如:doubled;shorts;longn;变量d具有类型属性double,其数据占有8字节的内存。short型变量s具有2字节内存,long型变量n具有4字节内存。21三、算术负运算与补码转换一个十进制数可以用字符串抽象的表示为:具体展开为:

字符串中的字符就限制在0,1,2,3,4,5,6,7,8,9十个字符数码中取值。十进制数的基数为10。遵循逢十进一的运算规则。10k称为第k+1位数字的权。22例如:,是第3位数的权,其结果是三位数的值。一般地基数为r的r进制数的值可以表示为:其含义就是:其中可以是0,1,2,...,r-1中的数码,rk称为第k+1位数字的权即以r为底的k次幂,遵循逢r进位的原则。这样从上面一般的公式得到二进制数的值为:整型数分有符号和无符号两种。无符号整数的最高的位数为该数的有机组成部分。有符号整数其最高的位用于识别数的正负,最高为0表示一个正数,1则表示负数。 23

例如:8位长的二进制数00000001b=+1d,01111111b=+127d,00000000b=-127d正数不做补码原码转换,即正数的原码、补码相同。例如:对于二进制数11111111可以理解为无符号数的255,也可以理解为原码-127,同时可以视为-1的补码。

求补的含义分为两种:一种是直接求补,另一种是间接求补。直接求补是C/C++语言的单目算术负运算,其含义为对于一个数取补就是对单目操作数按位求反最低位加1,按位求反操作就是1切换为0,0切换为1。算术负运算的源操作数无论数的正负。24例如:2进制数16进制数2进制数16进制数原操作数:11000011c3001111013d按位取反001111003c11000010c2最低位加1001111013d11000011c3十六进制数3d直接求补的结果为c3。十六进制数c3直接求补的结果为3d。例如语句:

printf("0x%x,0x%x\n",-0x10234567,-0xefdcba99);输出结果:0xefdcba99,0x10234567从上可以看出直接求补偶次得到原来的操作数。25间接求补运算仅对最高位为1的有符号数进行。当内存数据最高位为1时,如果需要执行有符号数的转换,以便得到这个数的原码,间接求补运算发生作用。 间接求补的运算规则可根据下面二个步骤进行:1.将最高位的1变为0,这就是取负数的绝对值。2.对负数的绝对值执行直接求补运算。例如对于最高位为1的16进制数ae,d2的二次求补为:16进制数2进制数16进制数2进制数数据的原值ae10101110d211010010最高位清02e001011105201010010按位取反d111010001ad10101101最低位加1d211010010ae1010111026下面两个步骤也可以得到最高位为1的数(视为负数)的原码:

1.对负数进行直接求补运算。由此得到负数原码的绝对值

2.将最高位设置为1。这也就是在负数的绝对值之前加上负号例如对于最高位为

温馨提示

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

评论

0/150

提交评论