一般来说,基本数据类型分为整型、浮点型、字符型,C++中又包括布尔型。每种类型里面又可以分为若干种类型(为了方便记忆,只列出常用的)。如下列出了四种基本数据类型。
类型 | 取值范围 |
大致范围 | |
---|---|---|---|
整型 | int | -2147483648~+2147483648 (即-2^31~+(2^31-1)) |
-2*10^9~+2*10^9 |
long long | -2^63~+(2^63-1) |
-9*10^18~+9*10^18 |
|
浮点型 | float | -2^128~+2^128 (实际精度6~7位) |
实际精度6~7位 |
double | -2^1024~+2^1024 (实际精度15~16位) |
实际精度15~16位 |
|
字符型 | char | -128~+127 |
-128~+127 |
布尔型 | bool | 0(false)or 1(true) |
0(false)or 1(true) |
1.整型
整型一般可以分为短整型(short)、整型(int)和长整型( long long),其中短整型(short)一般用不到,此处不再赘述。下面介绍整型(int)和长整型( long long),其中整型int也被称为 long int,长整型 long long也被称为 long long int。
①对整型int来说,一个整数占用32bit,也即4Byte,取值范围是2^31~+(2^31-1)。如果对范围不太有把握,可以记住绝对值在10^9范围以内的整数都可以定义成int型。
②对长整型long long来说,一个整数占用64bit,也即8Byte,取值范围是-2^63~+(2^63-1),也就是说,如果题目要求的整数取值范围超过2147483647(例如10^10或者10^18),就得用long long型来存储。
除此之外,对于整型数据,都可以在前面加个 unsigned,以表示无符号型,例如 unsigned int和 unsigned long long,占用的位数和原先相同,但是把负数范围挪到正数上来了。也就是说,unsigned int的取值范围是0~2^32-1, unsigned long long的取值范围是0~2^64-1。一般来说,很少会出现必须使用 unsigned int和 unsigned long long的情况,因此初学者只需要熟练使用int和 longlong即可。
简单来说,需要记住的是,看到题目要求10^9以内或者说32位整数,就用int型来存放如果是10^18以内(例如10^10)或者说64位整数,就要用 long long型来存放。
2.浮点型
通俗来讲,浮点型就是小数,一般可以分为单精度(float)和双精度( double)。
①对单精度float来说,一个浮点数占用32bit,其中1bit作为符号位、8bit作为指数位、23bit作为尾数位(了解即可),可以存放的浮点数的范围是-2^128~+2^128,但是其有效精度只有6~7位(由2^23可以得到,读者只需要知道6~7位有效精度即可)。这对一些精度要求比较高的题目是不合适的。
②对双精度double来说,一个浮点数占用64bit,其中依照浮点数的标准,1bit作为符号位、11bit作为指数位、52bit作为尾数位,可以存放的浮点数的范围是-2^1024~+2^1024,其有效精度有15~16位,比float优秀许多。
3.字符型
(1)字符变量和字符常量
在C语言中,字符常量使用ASCII码统一编码。标准ASCIi码的范围是0~127,其中包含了控制字符或通信专用字符(不可显示)和常用的可显示字符。在键盘上,通过敲击可以在屏幕上显示的字符就是可显示字符,比如0~9、A~Z、a~z等都是可显示字符,它们的ASCⅡ码分别是48~57、65~90、97~122,不过具体数字不需要记住,只要知道小写字母比大写字母的ASCII码值大32即可。ASCII表如下
ASCII控制字符
二进制 | 十进制 | 十六进制 | 缩写 | 可以显示的表示法 | 名称/意义 |
---|---|---|---|---|---|
0000 0000 | 0 | 00 | NUL | ␀ | 空字符(Null) |
0000 0001 | 1 | 01 | SOH | ␁ | 标题开始 |
0000 0010 | 2 | 02 | STX | ␂ | 本文开始 |
0000 0011 | 3 | 03 | ETX | ␃ | 本文结束 |
0000 0100 | 4 | 04 | EOT | ␄ | 传输结束 |
0000 0101 | 5 | 05 | ENQ | ␅ | 请求 |
0000 0110 | 6 | 06 | ACK | ␆ | 确认回应 |
0000 0111 | 7 | 07 | BEL | ␇ | 响铃 |
0000 1000 | 8 | 08 | BS | ␈ | 退格 |
0000 1001 | 9 | 09 | HT | ␉ | 水平定位符号 |
0000 1010 | 10 | 0A | LF | ␊ | 换行键 |
0000 1011 | 11 | 0B | VT | ␋ | 垂直定位符号 |
0000 1100 | 12 | 0C | FF | ␌ | 换页键 |
0000 1101 | 13 | 0D | CR | ␍ | 归位键 |
0000 1110 | 14 | 0E | SO | ␎ | 取消变换(Shift out) |
0000 1111 | 15 | 0F | SI | ␏ | 启用变换(Shift in) |
0001 0000 | 16 | 10 | DLE | ␐ | 跳出数据通讯 |
0001 0001 | 17 | 11 | DC1 | ␑ | 设备控制一(XON 启用软件速度控制) |
0001 0010 | 18 | 12 | DC2 | ␒ | 设备控制二 |
0001 0011 | 19 | 13 | DC3 | ␓ | 设备控制三(XOFF 停用软件速度控制) |
0001 0100 | 20 | 14 | DC4 | ␔ | 设备控制四 |
0001 0101 | 21 | 15 | NAK | ␕ | 确认失败回应 |
0001 0110 | 22 | 16 | SYN | ␖ | 同步用暂停 |
0001 0111 | 23 | 17 | ETB | ␗ | 区块传输结束 |
0001 1000 | 24 | 18 | CAN | ␘ | 取消 |
0001 1001 | 25 | 19 | EM | ␙ | 连接介质中断 |
0001 1010 | 26 | 1A | SUB | ␚ | 替换 |
0001 1011 | 27 | 1B | ESC | ␛ | 跳出 |
0001 1100 | 28 | 1C | FS | ␜ | 文件分割符 |
0001 1101 | 29 | 1D | GS | ␝ | 组群分隔符 |
0001 1110 | 30 | 1E | RS | ␞ | 记录分隔符 |
0001 1111 | 31 | 1F | US | ␟ | 单元分隔符 |
0111 1111 | 127 | 7F | DEL | ␡ | 删除 |
ASCII可显示字符
|
|
|
注意:
字符常量必须用单引号标注起来,以区分是作为字符变量还是字符常量出现。为此,在C语言中,字符常量(必须是单个字符)必须用单引号标注,以表明它们是字符常量。
(2)转义字符
上面提到,ASCII码中有一部分是控制字符,是不可显示的。像换行、删除、Tab等都是控制字符。那么在程序中怎样表示ー个控制字符呢?对一些常用的控制字符,C语言中可以用一个右斜线加一些特定的字母来表示。例如,换行通过“n”来表示,Tab键通过“t”来表示。由于这种情况下斜线后面的字母失去了本身的含义,因此又称为“转义字符”。在实际做题目时,比较常用的转义字符就只有下面两个,希望读者能够记住。
(3)字符串常量
字符串是由若干字符组成的串,在C语言中没有单独一种基本数据类型可以存储(C++中有 string类型),只能使用字符数组的方式。因此这里先介绍字符串常量。
上面提到,字符常量就是单个使用单引号标记的字符,那么此处的字符串常量则是由双引号标记的字符集,例如" WOAIDERENBUAIWO"就是一个字符串常量。
字符串常量可以作为初值赋给字符数组,并使用%s的格式输出。
最后指出,不能把字符串常量赋值给字符变量,因此 char c="abcd"的写法是不允许的。
4.布尔型
布尔型在C++中可以直接使用,但在C语言中必须添加 stdbool.h头文件才可以使用。布尔型变量又称为“bool型变量”,它的取值只能是ture(真)或者 false(假),分别代表非零与零。在赋值时,可以直接使用ture或false进行赋值,或是使用整型常量对其进行赋值,只不过整型常量在赋值给布尔型变量时会自动转换为true(非零)或者 false(零)。注意:“非零”是包括正整数和负整数的,即1和-1都会转换为tmue。但是对计算机来说,true和 false在存储时分别为1和0,因此如果使用%d输出bool型变量,则ture和 false会输出1和0。(c++文件扩展名为.cpp;C语言文件拓展名为.c,需要添加 include< stdboolh>头文件)