c语言的数据类型可分为4种,C语言数据类型中的基本类型

变量的数据类型

在应用程序中,由于数据存储时所需要的容量各不相同,因此,为了区分不同的数据,需要将数据划分为不同的数据类型。C语言中的数据类型有很多种,具体分类如下图所示。

b56412b11e4b548d31700e240ee21542.png

从图中可以看出,C语言中的数据类型可分为 4 种,分别是基本类型、构造类型、指针类型、空类型。下面我们将针对基本数据类型进行详细地讲解。

整型变量

在程序开发中,经常会遇到 0 、-100 、1024 等数字,这些数字都可称为整型。整型就是一个不包含小数部分的数。在 C 语言中,根据数值的取值范围,可以将整型定义为短整型(short int)、基本整型(int)和长整型(long int)。下面列举了整数类型的长度及其取值范围。

4f16ce33b8dd5cd9cbb07b56565779cb.png

从表中可以看出,整数类型可分为 short 、int 和 long ,这三种类型可以被 signed 和 unsigned 修饰。其中,被 signed 修饰的整数类型称为有符号的整数类型,被 unsigned 修饰的称为无符号的整数类型。它们之间最大的区别是无符号类型可以存放的正数范围比有符号类型中的范围大一倍。例如,int 的取值范围是-231~231-1,而 unsigned int 的取值范围是 0~232-1。默认情况下,整型数据都是有符号的,此时signed修饰符可以不用写。

需要注意的是,整型数据在内存中占的字节数与所选择的操作系统有关。虽然 C 语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型,short 类型整数的长度不能短于 int 类型。

刚刚我们了解了不同整数类型数据的取值范围,接下来我们通过一个案例来具体了解下:

#include

int main()

{

int a = {{12345:0}};

long b = -{{23456:0}}, sum1;

unsigned int c = {{32800:0}}, sum2;

sum1 = b - a;

sum2 = c - b;

printf("sum1=%ld,sum2=%ld\n",sum1,sum2);

return 0;

}

运行结果如下图所示:

5056ac3ccaa3d804afb999c74ed13436.png

结果是-{{35801:0}},无符号整数类型 sum2 的结果是 {{56256:0}}。

实型变量

实型变量也可以称之为浮点型变量,浮点型变量是用来存储小数数值的。浮点型变量分为两种:单精度浮点数(float)、双精度浮点数(double),不过 double 型变量所表示的浮点数比 float型变量更精确。

61d4b08bf994a20d898cee67feab3eb7.png

上表中,列出了两种浮点数类型变量所占的空间大小和取值范围。在取值范围中,E表示以 10 为底的指数,E后面的“+”号和“-”号代表正指数和负指数,例如,1.4E-45表示 1.4*10-45。为了让读者更好地理解浮点型数据在内存中的存储方式,接下来以单精度浮点数为例进行详细讲解,如下图所示。

1cc6dd45532e2b25942e3cefd8b45c99.png

在图中,浮点数包含符号位、小数位和指数位三部分。例如,小数 3.{{14159:0}}在内存中的符号位为“+”,小数部分为.{{31415:0}},指数位为1,连接在一起即为“+0.{{314159:0}} * 101= 3.{{14159:0}}”。在 C语言中,一个小数会被默认为 double类型的值,因此在为一个 float 类型的变量赋值时需要注意一点,所赋值的后面一定要加上字母“F”(或者小写“f”),而为 double类型的变量赋值时,其所赋值后面的字符“D”(或小写“d”),可以省略。具体示例如下:

float f = 123.4f; //为一个 float 类型的变量赋值,后面必须加上字母 f

double d1 = 100.1; //为一个 double 类型的变量赋值,后面可以省略字母 d

double d2 = 199.3d; //为一个 double 类型的变量赋值,后面可以加上字母 d

另外,在程序中也可以为一个浮点数类型变量赋予一个整数数值,示例如下:

float f = 100; //声明一个 float 类型的变量并赋整数值

double d = 100; //声明一个 double 类型的变量并赋整数值

重要知识点:float和 double之间的数据转换

由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差。例如,将 3.{{1415926:0}}赋给一个 float型变量,但它只能保证前 7 位是有效的。

如下面的案例所示:

#include

int main()

{

float a;

a = 3.{{141592612:0}};

printf("a=%f\n",a);

return 0;

}

运行结果如下图所示:

a796f253344ec37633b8049aca29eb23.png

从图中可以看出,程序运行结果为 3.{{141593:0}}。我们会发现该输出的值与给定的值之间有一些误差。这是由于 a是单精度浮点型变量,它只能提供 7 位有效数字,而 3.{{141592612:0}}已经超出了其取值范围,所以后面的几位被舍去了。

字符型变量

字符型变量用于存储一个单一字符,在 C语言中用 char 表示,其中每个字符变量都会占用 1个字节。在给字符型变量赋值时,需要用一对英文半角格式的单引号(' ')把字符括起来。

例如,'A'的声明方式如下所示:

char ch = 'A'; //为一个 char 类型的变量赋值字符'a'

68ba58738595c3ca8c073aaf1727599d.png

上述代码中,将字符常量 'A '放到字符变量 ch 中,实际上并不是把该字符本身放到变量的内存单元中去,而是将该字符对应的 ASCII编码放到变量的存储单元中。例如:ASCII使用编号 65来对应大写字母“A”,实际上变量 ch存储的是整数 65,而不是字母“A”本身。

接下来通过一个案例来说明:

#include

int main()

{

char ch1 = 'A';

char ch2 = 65;

printf("%c\n",ch1);

printf("%c\n",ch2);

return 0;

}

行结果如图所示:

37a27b4d3edda988b8305b967ef78135.png

上例中,定义了两个 char 类型变量,分别赋值为字符 'A' 和数字 65,然后通过 printf函数把两个变量的内容以字符形式打印到屏幕上。从图中可以看出,两个变量输出的结果是一样的,这说明对于字符型来说,A和 65其实没什么区别。严格来说,字符类型也是整型类型。

需要注意的是,除了可以直接从键盘上输入的字符(如英文字母,标点符号,数字,数学运算符等)以外,还有一些字符是无法用键盘直接输入的,比如,“回车”,此时需要采用一种新的定义方式——转义字符,它以反斜杠\开头,随后接特定的字符。

下面列举了一些常见的转义字符:

015c21e421eea99d8a2bb0ca87649704.png

接下来,我们通过一个具体的案例来演示转义符的用法:

1 #include

2 int main()

3 {

4 char ch1 = 'A';

5 char ch2 = '\n';

6 char ch3 = 'B';

7 char ch4 = '\\';

8 printf("%c",ch1);

9 printf("%c",ch2);

10 printf("%c",ch3);

11 printf("%c",ch4);

12 printf("\n");

13 return 0;

14 }

运行结果如下图所示:

711d62f2e82124fc7057e3bab647c988.png

案例中定义了四个字符型变量,其中 ch2 被赋值为转义字符 '\n' 即换行符序,ch4被赋值为转义字符 '\\' 即反斜杠。从第 8 行到第 11 行按照顺序分别将四个变量的值输出到屏幕上,我们会发现,输出字符 A之后则会另起一行输出字符 B,转义字符 '\n' 的作用就是控制输出结果另起一行。字符 B后输出的是字符 ' \' 。第12 行为了使输出结果的格式清晰一些又输出了一个换行符,防止程序结束后命令行提示符紧跟在输出结果的后面。

求关注,求转发,求支持!

想要学习的童鞋可以加群:564950050

同时关注我们的微信公众号:【轻松学C语言】