数据类型

所谓数据类型,是指给不同类型的数据赋予不同的类型,以便于区分不同类型数据的运算方式以及其在内存中的存储方式。C语言中是有严格的数据类型区分的。

bit与Byte与内存存储

在实际理解各个数据类型之前,笔者需要先科普一些简单的概念。

任何数据在电脑中的存储其实都是以二进制的形式进行存储的,即只有0和1两种形式。 例如数字5在内存中的存储内容实际是101。

而在我们的描述中,往往把内存中的每一个0或1称为一个,即bit。 在此基础上,我们将8个bit的组合称为一个字节,即Byte

在C语言中,大部分内存相关的操作都是以字节为最小单位的,例如sizeof运算符的作用就是返回参数类型所占有的字节数。

数据类型概览

数据类型一般包括字符型、整型以及浮点型,此外还有取值离散的枚举类型、由各种基础类型组合而成的结构体以及空类型。

此处我们只介绍最基础的字符型整型以及浮点型

每个数据类型都有其对应的关键字,一般用于声明对应数据类型的变量:

类型 关键字
字符型 char
整型 int
浮点型 float、double

字符类型

要想了解字符类型,首先得了解如何表示数据类型。在C语言中,我们往往使用一对单引号来包裹一个字符,以便使其与一般的代码内容区分开。例如:'a'

需要强调的是,在一般的使用中,一对单引号内只能包裹一个字符

注:在实际的C语言标准中并没有规定一对单引号中只能包裹一个字符,但是这种写法实际使用中极易在数据类型转换中丢失内容,并且不符合我们编写代码清晰易懂的原则,所以请尽量不要用到实际的代码编写中。

计算机之所以称为计算机,是因为他们的作用主要是计算。我们之前也提到过:任何数据在电脑中的存储其实都是以二进制的形式进行存储的,即只有0和1两种形式。说到这里相信读者很容易就会想到一个问题:字符该怎么使用二进制进行存储呢?

这个问题就很好的引出了我们接下来要讲述的内容----ASCII。

ASCII全称为American Standard Code for Information Interchange,译为美国信息互换标准代码。ASCII的内容其实就是一张对照表,其中规定了一些常见的字符与数字的对应关系,例如小写字母a在表中就规定与数字61对应。完整的ASCII表将会在本章节末附上。

在之前的章节中我们了解了C语言中有一部分保留的关键字,其中char关键字用于声明字符类型相关的变量,例如,我们可以用以下代码来声明一个字符类型的变量:

char a = 'a';

字符类型的变量在内存中所占据的大小是一个字节,一个字节的空间实际上可以表示256个不同的数字,

而在实际的使用中,如果不考虑ASCII的对应关系的话,其实字符型内存储的就是一串简单的数字,可以像一般变量一样参与数字运算。此外,在ASCII覆盖的范围内,将字符变量赋值为字符或者数字都是等效的,例如:

char a = 'a';
char a = 97;

出于避免读者混淆的目的,笔者在此处强调一下数字与字符的关系:

以下两句代码声明的变量实际上具有不同的值:

char a = 0;
char b = '0';

其中,a被赋值为数字零,其值为0;b被赋值为字符零,其值为48。综上,请读者在使用的时候注意区分数字与字符的区别。

整型

浮点型

附:ASCII码对照表

二进制 十进制 十六进制 字符/缩写 解释
00000000 0 00 NUL (NULL) 空字符
00000001 1 01 SOH (Start Of Headling) 标题开始
00000010 2 02 STX (Start Of Text) 正文开始
00000011 3 03 ETX (End Of Text) 正文结束
00000100 4 04 EOT (End Of Transmission) 传输结束
00000101 5 05 ENQ (Enquiry) 请求
00000110 6 06 ACK (Acknowledge) 回应/响应/收到通知
00000111 7 07 BEL (Bell) 响铃
00001000 8 08 BS (Backspace) 退格
00001001 9 09 HT (Horizontal Tab) 水平制表符
00001010 10 0A LF/NL(Line Feed/New Line) 换行键
00001011 11 0B VT (Vertical Tab) 垂直制表符
00001100 12 0C FF/NP (Form Feed/New Page) 换页键
00001101 13 0D CR (Carriage Return) 回车键
00001110 14 0E SO (Shift Out) 不用切换
00001111 15 0F SI (Shift In) 启用切换
00010000 16 10 DLE (Data Link Escape) 数据链路转义
00010001 17 11 DC1/XON (Device Control 1/Transmission On) 设备控制1/传输开始
00010010 18 12 DC2 (Device Control 2) 设备控制2
00010011 19 13 DC3/XOFF (Device Control 3/Transmission Off) 设备控制3/传输中断
00010100 20 14 DC4 (Device Control 4) 设备控制4
00010101 21 15 NAK (Negative Acknowledge) 无响应/非正常响应/拒绝接收
00010110 22 16 SYN (Synchronous Idle) 同步空闲
00010111 23 17 ETB (End of Transmission Block) 传输块结束/块传输终止
00011000 24 18 CAN (Cancel) 取消
00011001 25 19 EM (End of Medium) 已到介质末端/介质存储已满/介质中断
00011010 26 1A SUB (Substitute) 替补/替换
00011011 27 1B ESC (Escape) 逃离/取消
00011100 28 1C FS (File Separator) 文件分割符
00011101 29 1D GS (Group Separator) 组分隔符/分组符
00011110 30 1E RS (Record Separator) 记录分离符
00011111 31 1F US (Unit Separator) 单元分隔符
00100000 32 20 (Space) 空格
00100001 33 21 !
00100010 34 22 "
00100011 35 23 #
00100100 36 24 $
00100101 37 25 %
00100110 38 26 &
00100111 39 27 '
00101000 40 28 (
00101001 41 29 )
00101010 42 2A *
00101011 43 2B +
00101100 44 2C ,
00101101 45 2D -
00101110 46 2E .
00101111 47 2F /
00110000 48 30 0
00110001 49 31 1
00110010 50 32 2
00110011 51 33 3
00110100 52 34 4
00110101 53 35 5
00110110 54 36 6
00110111 55 37 7
00111000 56 38 8
00111001 57 39 9
00111010 58 3A :
00111011 59 3B ;
00111100 60 3C <
00111101 61 3D =
00111110 62 3E >
00111111 63 3F ?
01000000 64 40 @
01000001 65 41 A
01000010 66 42 B
01000011 67 43 C
01000100 68 44 D
01000101 69 45 E
01000110 70 46 F
01000111 71 47 G
01001000 72 48 H
01001001 73 49 I
01001010 74 4A J
01001011 75 4B K
01001100 76 4C L
01001101 77 4D M
01001110 78 4E N
01001111 79 4F O
01010000 80 50 P
01010001 81 51 Q
01010010 82 52 R
01010011 83 53 S
01010100 84 54 T
01010101 85 55 U
01010110 86 56 V
01010111 87 57 W
01011000 88 58 X
01011001 89 59 Y
01011010 90 5A Z
01011011 91 5B [
01011100 92 5C \
01011101 93 5D ]
01011110 94 5E ^
01011111 95 5F _
01100000 96 60 `
01100001 97 61 a
01100010 98 62 b
01100011 99 63 c
01100100 100 64 d
01100101 101 65 e
01100110 102 66 f
01100111 103 67 g
01101000 104 68 h
01101001 105 69 i
01101010 106 6A j
01101011 107 6B k
01101100 108 6C l
01101101 109 6D m
01101110 110 6E n
01101111 111 6F o
01110000 112 70 p
01110001 113 71 q
01110010 114 72 r
01110011 115 73 s
01110100 116 74 t
01110101 117 75 u
01110110 118 76 v
01110111 119 77 w
01111000 120 78 x
01111001 121 79 y
01111010 122 7A z
01111011 123 7B {
01111100 124 7C \
01111101 125 7D }
01111110 126 7E ~
01111111 127 7F DEL (Delete) 删除

results matching ""

    No results matching ""