C++编程中的数据类型和常量学习教程
C++数据类型 C++的数据包括常量与变量,常量与变量都具有类型。由以上这些数据类型还可以构成更复杂的数据结构。例如利用指针和结构体类型可以构成表、树、栈等复杂的数据结构。 C++并没有统一规定各类数据的精度、数值范围和在内存中所占的字节数,各C++编译系统根据自己的情况作出安排。表2.1列出了Visual C++数值型和字符型数据的情况。 几点说明: 2) 整型数据的存储方式为按二进制数形式存储,例如十进制整数85的二进制形式为1010101,则在内存中的存储形式如下图所示。 3) 在整型符号int和字符型符号char的前面,可以加修饰符signed(表示“有符号”)或unsigned(表示“无符号”)。如果指定为signed,则数值以补码形式存放,存储单元中的最高位(bit)用来表示数值的符号。如果指定为unsigned,则数值没有符号,全部二进制位都用来表示数值本身。例如短整型数据占两个字节 , 有符号时,能存储的最大值为215-1,即32767,最小值为-32768。无符号时,能存储的最大值为216-1,即65535,最小值为0。有些数据是没有负值的,可以使用unsigned,它存储正数的范围比用signed时要大一倍。 4) 浮点型(又称实型)数据分为单精度(float)、双精度(double)和长双精度(long double)3种,在Visual C++ 6.0中,对float提供6位有效数字,对double提供15位有效数字,并且float和double的数值范围不同。对float分配4个字节,对double和long double分配8个字节。 5) 表中类型标识符一栏中,方括号[ ]包含的部分可以省写,如short和short int等效,unsigned int和unsigned等效。 常量的值是不能改变的,一般从其字面形式即可判别是否为常量。常量包括两大类,即数值型常量(即常数)和字符型常量。如12,-3为整型常量,4.6,-1.23为实型常量,包含在两个单撇号之间的字符为字符常量,如′a′,′x′。这种从字面形式即可识别的常量称为“字面常量”或“直接常量”。
数值常量就是通常所说的常数。在C++中,数值常量是区分类型的,从字面形式即可识别其类型。 整型常量(整数)的类型 那么,一个整型常量怎样从字面上区分为以上的类别呢? 一个整型常量可以用3种不同的方式表示: 一个浮点数可以用两种不同的方式表示: 2) 指数形式(即浮点形式)。一个浮点数可以写成指数形式,如3.14159可以表示为0.314159×101,3.14159×100,31.4159×10-1,314.159×10-2等形式。在程序中应表示为:0.314159e1,3.14159e0,31.4159e-1,314.159e-2,用字母e表示其后的数是以10为底的幂,如e12表示1012。其一般形式为: 上面各数据中的0.314159,3.14159,31.4159,314.159 等就是其中的数字部分。可以看到:由于指数部分的存在,使得同一个浮点数可以用不同的指数形式来表示,数字部分中小数点的位置是浮动的。例如: a=0.314159e1; a=3.14159e0; a=31.4159e-1; a=314.159e-2; 以上4个赋值语句中,用了不同形式的浮点数,但其作用是相同的。 在程序中不论把浮点数写成小数形式还是指数形式,在内存中都是以指数形式(即浮点形式)存储的。例如不论在程序中写成314.159或314.159e0,31.4159e1,3.14159e2,0.314159e3等形式,在内存中都是以规范化的指数形式存放, 数字部分必须小于1,同时,小数点后面第一个数字必须是一个非0数字,例如不能是0.0314159。因此314.159和314.159e0,0.314159e3在内存中表示成0.314159×103。存储单元分为两部分,一部分用来存放数字部分,一部分用来存放指数部分。为便于理解,在图2.3中是用十进制表示的,实际上在存储单元中是用二进制数来表示小数部分,用2的幂次来表示指数部分的。 对于以指数形式表示的数值常量,也都作为双精度常量处理。 1) 普通的字符常量 2) 转义字符常量 3) 字符数据在内存中的存储形式及其使用方法 既然字符数据是以ASCII码存储的,它的存储形式就与整数的存储形式类似。这样,在C++中字符型数据和整型数据之间就可以通用。一个字符数据可以赋给一个整型变量,反之,一个整型数据也可以赋给一个字符变量。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算。 【例】将字符赋给整型变量。 #include <iostream> using namespace std; int main( ) { int i,j; //i和j是整型变量 i='A'; //将一个字符常量赋给整型变量i j='B'; //将一个字符常量赋给整型变量j cout<<i<<' '<<j<<'n'; //输出整型变量i和j的值,'n' 是换行符 return 0; } 执行时输出 65 66 i和j被指定为整型变量。但在第5和第6行中,将字符'A'和'B'分别赋给i和j,它的作用相当于以下两个赋值语句: i=65;j=66; 因为'A'和'B'的ASCII码为65和66。在程序的第5和第6行是把65和66直接存放到i和j的内存单元中。因此输出65和66。 可以看到:在一定条件下,字符型数据和整型数据是可以通用的。但是应注意字符数据只占一个字节,它只能存放0~255范围内的整数。 【例】字符数据与整数进行算术运算。下面程序的作用是将小写字母转换为大写字母。 #include <iostream> using namespace std; int main( ) { char c1,c2; c1='a'; c2='b'; c1=c1-32; c2=c2-32; cout<<c1<<' '<<c2<<endl; return 0; } 运行结果为 A B 'a'的ASCII码为97,而'A'的ASCII码为65,'b'为98,'B'为66。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII代码大32。C++符数据与数值直接进行算术运算,'a'-32得到整数65,'b'-32得到整数66。将65和66存放在c1,c2中,由于c1,c2是字符变量,因此用cout输出c1,c2时,得到字符A和B(A的ASCII码为65,B的ASCII码为66)。 用双撇号括起来的部分就是字符串常量,如"abc","Hello!","a+b","Li ping"都是字符串常量。字符串常量"abc"在内存中占4个字节(而不是3个字节),见图。 编译系统会在字符串最后自动加一个' '作为字符串结束标志。但' '并不是字符串的一部分,它只作为字符串的结束标志。如 cout<<"abc"<<endl; 输出3个字符abc,而不包括' '。 注意: "a"和'a'代表不同的含义,"a"是字符串常量,'a' 是字符常量。前者占两个字节,后者占1个字节。请分析下面的程序片段: char c; //定义一个字符变量 c='a'; //正确 c="a"; //错误,c只能容纳一个字符 请思考:字符串常量"abcn"包含几个字符?不是5个而是4个字符,其中"n"是一个转义字符。但它在内存中占5个字节(包括一个" "字符) 。编译系统遇到""时就会把它认作转义字符的标志,把它和其后的字符一起作为一个转义字符。 如果""后面的字符不能与""组成一个合法的转义字符(如"c"),则在编译时显示出错信息。如果希望将""字符也作为字符串中的一个字符,则应写为"abcn",此时字符包括5个字符,即a,b,c,,n。如果有以下输出语句: cout<<"abcn"<<endl; 则会输出: abc (然后换行) 同理执行 cout<<"I say "Thank you!"n"; 的输出是: I say "Thank you!" 如果在一个字符串中最后一个字符为"",则表示它是续行符,下一行的字符是该字符串的一部分,且在两行字符串间无空格。如 cout<<"We must study C //本行最后的""后面的空格和换行均不起作用 ++ hard!"; //本行的字符紧连在上一行最后的""前面字符之后 则输出: We must study C++ hard! 符号常量 为了编程和阅读的方便,在C++程序设计中,常用一个符号名代表一个常量,称为符号常量,即以标识符形式出现的常量。 【例】符号常量的使用。 #include <iostream> using namespace std; #define PRICE 30 //注意这不是语句,末尾不要加分号 int main ( ) { int num,total; num=10; total=num * PRICE; cout<<"total="<<total<<endl; return 0; } 程序中用预处理命令#define指定PRICE在本程序单位中代表常量30,此后凡在本程序单位中出现的PRICE都代表30,可以和常量一样进行运算,程序运行结果为 total=300 请注意符号常量虽然有名字,但它不是变量。它的值在其作用域(在本例中为主函数)内是不能改变的,也不能被赋值。如用赋值语句"PRICE=40;"给PRICE赋值是错误的。 使用符号常量的好处是:含义清楚,在需要改变一个常量时能做到"一改全改"。 如: #define PRICE 35 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |