一般来说,基本数据类型分为整型、浮点型、字符型,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)or1(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可显示字符
二进制
十进制
十六进制
图形
0010 0000
32
20
(空格)(␠)
0010 0001
33
21
!
0010 0010
34
22
"
0010 0011
35
23
#
0010 0100
36
24
$
0010 0101
37
25
%
0010 0110
38
26
&
0010 0111
39
27
'
0010 1000
40
28
(
0010 1001
41
29
)
0010 1010
42
2A
*
0010 1011
43
2B
+
0010 1100
44
2C
,
0010 1101
45
2D
-
0010 1110
46
2E
.
0010 1111
47
2F
/
0011 0000
48
30
0
0011 0001
49
31
1
0011 0010
50
32
2
0011 0011
51
33
3
0011 0100
52
34
4
0011 0101
53
35
5
0011 0110
54
36
6
0011 0111
55
37
7
0011 1000
56
38
8
0011 1001
57
39
9
0011 1010
58
3A
:
0011 1011
59
3B
;
0011 1100
60
3C
<
0011 1101
61
3D
=
0011 1110
62
3E
>
0011 1111
63
3F
?
二进制
十进制
十六进制
图形
0100 0000
64
40
@
0100 0001
65
41
A
0100 0010
66
42
B
0100 0011
67
43
C
0100 0100
68
44
D
0100 0101
69
45
E
0100 0110
70
46
F
0100 0111
71
47
G
0100 1000
72
48
H
0100 1001
73
49
I
0100 1010
74
4A
J
0100 1011
75
4B
K
0100 1100
76
4C
L
0100 1101
77
4D
M
0100 1110
78
4E
N
0100 1111
79
4F
O
0101 0000
80
50
P
0101 0001
81
51
Q
0101 0010
82
52
R
0101 0011
83
53
S
0101 0100
84
54
T
0101 0101
85
55
U
0101 0110
86
56
V
0101 0111
87
57
W
0101 1000
88
58
X
0101 1001
89
59
Y
0101 1010
90
5A
Z
0101 1011
91
5B
[
0101 1100
92
5C
\
0101 1101
93
5D
]
0101 1110
94
5E
^
0101 1111
95
5F
_
二进制
十进制
十六进制
图形
0110 0000
96
60
`
0110 0001
97
61
a
0110 0010
98
62
b
0110 0011
99
63
c
0110 0100
100
64
d
0110 0101
101
65
e
0110 0110
102
66
f
0110 0111
103
67
g
0110 1000
104
68
h
0110 1001
105
69
i
0110 1010
106
6A
j
0110 1011
107
6B
k
0110 1100
108
6C
l
0110 1101
109
6D
m
0110 1110
110
6E
n
0110 1111
111
6F
o
0111 0000
112
70
p
0111 0001
113
71
q
0111 0010
114
72
r
0111 0011
115
73
s
0111 0100
116
74
t
0111 0101
117
75
u
0111 0110
118
76
v
0111 0111
119
77
w
0111 1000
120
78
x
0111 1001
121
79
y
0111 1010
122
7A
z
0111 1011
123
7B
{
0111 1100
124
7C
|
0111 1101
125
7D
}
0111 1110
126
7E
~
注意:
字符常量必须用单引号标注起来,以区分是作为字符变量还是字符常量出现。为此,在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都会转换为true。但是对计算机来说,true和 false在存储时分别为1和0,因此如果使用%d输出bool型变量,则ture和 false会输出1和0。(c++文件扩展名为.cpp;C语言文件拓展名为.c,需要添加 include< stdboolh>头文件)