第十四篇:C++的基本数据类型
五种基本数据类型
基本数据类型是与硬件结构(主要是计算机的字长)直接相关的类型,是构造其他派生类型的基本元件。
C++的基本数据类型有以下几类:
整型 (说明符为int )
字符型 (说明符为char )
浮点型 (说明符为float )
双精度型 (说明符为double )
空值型 (说明符为void)
用修饰符形成的扩展类型
除void类型外,其余四种基本类型的说明符之前还可以加上特定的修饰符形成扩展类型。
整型和字符型前面可加上
signed(有符号数)
unsigned(无符号数)
long(长型)
short(短型)
双精度型前面可加上long来修饰,整型缺省为signed 。
当整型前面有修饰符出现时,可省略关键字int。
float、double、long double统称为浮点类型(实型)。
char型和int型有时可理解为同一类,因为字符在内存中是以ASCII码的形式存储的,而ASCII码值为整数。
类型名 | 字长(字节) | 范围 |
short [int] | 2 | –32768 ~ 32767 |
signed short [int] | 2 | –32768 ~ 32767 |
unsigned short [int] | 2 | 0 ~ 65535 |
int | 4 | –2147483648 ~ 2147483647 |
signed [int] | 4 | –2147483648 ~ 2147483647 |
unsigned [int] | 4 | 0 ~ 4294967295 |
long [int] | 4 | –2147483648 ~ 2147483647 |
signed long [int] | 4 | –2147483648 ~ 2147483647 |
unsigned long [int] | 4 | 0 ~ 4294967295 |
char | 1 | –128 ~ 127 |
signed char | 1 | –128 ~ 127 |
unsigned char | 1 | 0 ~ 255 |
float | 4 | 3.4E-38 ~ 3.4E+38 (约7位有效数字) |
double | 8 | 1.7E-308 ~ 1.7E+308 (约15位有效数字) |
long double | 10 | 3.4E-4932 ~ 1.1E+4932 (约19位有效数字) |
void | 0 | 无值 |
常量
常量是在程序中一经定义就不再变化的量。
常量也具有一定的数据类型。 常量的类型是由其书写形式决定。例如,45.28是浮点类型,370是整型,‘p’是字符型等。 此外还有字符串常量和符号常量。
字符常量
用引号括起来的单个字符称为字符常量。例如 ‘Y’、‘y’、‘6’、‘#’、‘ ’(空格)等。
转义序列(escape sequences)
字符在计算机内是以二进制编码的形式存放的。ASCII码是C++使用的一种主要编码。
ASCII码表中,除了可显示字符之外,还有一些不可显示字符,用于产生某种控制操作,例如换行符、响铃符等。
对于不可显示的控制类字符,没有相应的图形符号,只能用另一种方法——转义序列来表示。
转义序列有两种形式。一种是用一个反斜杠加上该字符的ASCII码来构成。其中字符的ASCII码可采用三位八进制数(形如\ddd)或两位十六进制数(形如\xhh)。 例如,换行符的ASCII码为10(八进制为12,十六进制为0A),则可表示为'\012'或'\x0A' ;
另一种称为转义字符,由一个反斜杠后跟一个字符来表示。
转义字符 | 含 义 |
\a | 响铃 |
\n | 换行符 |
\r | 回车符 |
\t | 水平制表符(tab键) |
\v | 垂直制表符 |
\b | 退格符(backspace键) |
\\ | 反斜线 |
\' | 单引号 |
\" | 双引号 |
\? | 问号 |
\f | 进页符(走纸) |
\0 | 空字符(null) |
整型常量
由于计算机所能表示的整数的范围是有限的,因此整数类型事实上只是数学上所说的整数的一个子集。
除十进制外,整型常量还可以用八进制、十六进制来表示。
十进制整型常量没有前缀,且不能以0开头。
八进制整型常量必须以0开头,其后由0~7之间的数字组成。如012、0375等。
十六进制整型常量以0x或0X开头,其后由0~9之间的数字和英文字母A~Z(或a~z)组成。如0x32、0xA8等。
整型常量可加上后缀,以区分各种不同类型的整数。具体如下: 后缀为L(或l),表示该常量为长整数(long int 型) 如: 8739L、-584l ;
后缀为U(或u),表示该整型常量为无符号整数 (unsigned int 型) 如: 85U、20u ;
后缀为L(或l)和U(或u)的组合,表示该常量为无符号长整数(unsigned long int 型)
如: 6397LU、765Lu、4325lU; 07656lu(无符号八进制长整数7656)等。
浮点常量
浮点常量可以采用一般表示法和科学记数法表示。 科学记数法常用于表示很大或很小的浮点数。如1.2E8(即1.2×108)、-5.7356E-9(即-5.7356×10-9)。
浮点常量的整数部分和小数部分如果为零可以省去,但不可两者都省去。 例如: .34 456. 5.E3 .89E2 都是合法的数据。
浮点常量可带后缀,以区分各种不同类型的实数。
若没有后缀,表示该浮点常量为双精度数(double型),如75.23 ; 后缀为F(或f),表示该浮点常量为浮点数(float型),如4.233F、-12.9f ; 后缀为L(或l),表示该浮点常量为长双精度数(long double型),如8.5l、2.07L。
字符串常量
字符串常量是用双引号括起来的字符序列,又称串常量或字符串。字符串中可包含任意字符,包括空格、中文、字符的转义序列等。
例如:
"How are you. "
"Thank you!\n"
"请输入两个整数:"
由于双引号是字符串的定界符,因此字符串本身所包含的双引号应该用其转义字符\“来表示。
例如下面的语句: cout << "Press \"Y\" to continue or \"N\" to cancel" << endl ;
输出为: Press "Y" to continue or "N" to cancel
如果字符串中含有使用反斜杠加字符的ASCII码来表示的转义序列时,C++将按最长有效长度对转义序列进行解释。
例如,语句 cout << "x\x34y" << endl ; 由于'\x34'是字符'4'的转义序列,得到的输出为: x4y
字符常量可以按字符型变量同样的形式存放,在内存中只占一个字节。
字符串常量是用一维字符数组来存放,在内存中占多个字节。每个字符串除给定的字符序列外,都有一个结束符'\0'(即ASCII码为0 的“空字符”)。
符号常量
常量除可以直接以其字面形式来表示(如3.14159)外,还可以用一个标识符来代替,用来代替常量的标识符称为符号常量。
符号常量定义格式: const 数据类型 常量标识符 =常量表达式; const 数据类型 常量标识符 (常量表达式); 例如,下面这句 const float pi = 3.14159 ; 或 const float pi ( 3.14159 ) ;
符号常量实际上是只读变量,由保留字const规定了它的值在程序中不能被改变。因此,符号常量又称为const变量。编译器对符号常量的处理同对变量的处理类似,但不允许修改符号常量的值,否则将导致编译错误。符号常量必须在定义的时候进行初始化,之后不能再对它赋值。
例如,下面的语句是非法的: const int x=10; …… x=20; // 非法
变量
变量是存放数据的容器。
程序设计语言中的变量是内存物理存储单元的抽象。
变量的类型和定义
C++中,变量必须先定义、后使用。但不一定要放在程序开头,可以在程序中随时定义、随时使用。
变量的定义使用一个声明语句,其格式为: 类型 变量名表;
例如,语句 int x, y; char ch; 声明了两个整型变量x、y,一个字符型变量ch。
在声明语句中变量的命名应遵循标识符的规定。例如: total、A3、is_data、Setvalue、x_ptr 都是合法的变量名。
变量命名应尽量做到“见名知意”,并可采用适当使用下划线、相邻单词首字母大写等措施来提高程序的可读性。
变量声明对应机器底层的实例化操作,编译器将根据指定的变量类型在内存中为每个变量分配一个存储单元。
例如,在图3.2中,整型变量x的值为66,x 的内存地址为E320F49C。
int x , y ; char ch ;
变量的类型—变量的长度(字节数) 变量名(存储单元首地址的映射) 变量的值—存储单元中的内容。
变量定义实际上是指示程序为变量分配存储单元,这个分配过程也称作变量的实例化。
变量的初始化
在变量声明语句中为变量赋一个初值称为变量的初始化,例如:
int a=3, b=-78;
double area=67.34;
则变量a、b、area分别被赋予初值3、-78、67.34,并将保留该值直到被修改为止。
实例化与初始化是两个不同的操作。
上面的语句中既有实例化也有初始化。
C++提供另一种形式的初始化方法。
例如,上面这两句可改写为: int a(3), b(-78); double area(67.34);
这种形式的初始化语句中也包含了实例化。
对比:常量定义中必然包含初始化:
const float pi ( 3.14159 ) ;
变量的赋值
变量值的改变通过赋值运算来完成。 “=”是赋值运算符,它的左边只能是变量标识符,右边可以是常量、变量或表达式等。
例如,对于已声明为int型的变量x,语句 x=3+2*5; 将表达式3+2*5的值13赋给x,即装入x的存储区域中。
注意:
1. 赋值运算符“=”不是数学上的等号,不代表等于的意思。
2. 赋值运算符是从右到左结合的。 例如表达式 x=y=5; 相当于 y=5; x=y;
例 计算圆的面积
# include <iostream.h>
void main()
{
const double pi = 3.1415926 ; //const 表示常量,后面的不会改变
double radius , area ; //面积和周长
cout << "Please enter radius:" ; //提示语
cin >> radius ; //输入半径
area = pi * radius * radius ; // 面积 = pi乘以半径的平分
cout << "The area is:" << area << endl ; //输出
}