我们在原来初步了解C语言的基础上,上一篇文章介绍标识符和常量,相信大家对标识符的命名已经有了较深入的认识,那么本篇文章我们来认真讨论下C语言的数据类型。
我们知道计算机处理的对象最终都是数据
那么C语言中数据该如何表示呢?
数据都有什么类型?
数据在计算机里如何存储呢?
1. 数据类型的定义
数据类型是编程语言中用来定义数据的特性和约束的一种概念。它决定了数据所占用的内存大小
,数据的取值范围
,以及可以对数据执行的操作
。
在计算机中,所有数据都以二进制形式存储。数据类型定义了如何将二进制表示转换为不同的数据类型,并规定了对数据进行操作的规则和限制。通过使用不同的数据类型,程序可以有效地管理和操作内存中的数据。
2. 数据类型的分类
本文主要对基本类型(整型、字符型、浮点型)进行详细讲解,复合类型和指针类型在后面的文章中会逐个深入学习。
3. 基本类型
3.1 整型
整型。用来存储整数
的类型,如1、32、49等。整型包括了以下 3 种数据类型:
-
短整型,short,所占存储空间大小为2个字节,存储的数字范围在-215 ~ 215-1。
-
整型,int,所占存储空间大小为4个字节,存储的数字范围在-231~ 231-1。
-
长整型,long,所占存储空间大小为4个字节,存储的数字范围在-231 ~ 231-1。
#include <stdio.h>
int main() {
printf("sizeof(int) = %d\n", sizeof(int));
printf("sizeof(short) = %d\n", sizeof(short));
printf("sizeof(long) = %d\n", sizeof(long));
printf("sizeof(long long) = %d\n\n", sizeof(long long));
short shortNum = 20;
int intNum = 200;
long longNum = 400;
printf("短整型 \t%d\n",shortNum);
printf("整型 \t%d\n",intNum);
printf("长整型 \t%d\n",longNum);
return 0;
}
这是在我的电脑上显示的整型类型的数据大小以及应用举例,结果如下:
sizeof函数:返回对象或者类型所占内存的字节数。
3.2 字符型
字符型。用来存储字符
的类型,如’a’,‘B’,‘#’,'%'等。
字符型只占一个字节,一个字节通常由8位二进制数组成,可以表示256个不同的数值,范围从0到255。
#include <stdio.h>
int main() {
printf("sizeof(char) = %d\n", sizeof(char));
char charAlphabet = 'a';
char charNum = 65;
char charSymbol = '%';
printf("字母 \t%c\n",charAlphabet);
printf("数字 \t%c\n",charNum);
printf("符号 \t%c\n",charSymbol);
return 0;
}
结果如下:
通过这个例子大家可发现什么问题?
- 我把一个数值给了char类型,竟然可以返回一个字母
- 只有八位的存储空间,如何区分字符和字母的?
事实上,C语言内部存储的字符型就是一个数字,这个数字只有八位 ,通过查询ASCII码表,将数字对应的字符表示出来的,所以我们给一个合适的整数也能够正常打印出对应的字符,比如例子中的 65
表示成了A
。
3.3 浮点型
浮点型。用于存储小数/浮点数的类型,比如3.1314、1.25、7.85等
因为精度的不同又分为3种(float,double,long double):
- 单精度型,float,所占存储空间大小为4个字节,取值范围是-3.4×10-38~3.4×10+38。
- 双精度型,double,所占存储空间大小为8个字节,取值范围是-1.7×10-308~1.7×10308。
- 长双精度,long double,所占存储空间大小为16个字节,取值范围是-1.2×10-4932~1.7×104932。
#include <stdio.h>
int main()
{
printf("sizeof(float) = %d\n", sizeof(float));
printf("sizeof(double) = %d\n", sizeof(double));
printf("sizeof(long double) = %d\n", sizeof(long double));
float floatNum = 3.1415;
double doubuleNum = 6.34312324;
printf("单精度型 \t%f\n",floatNum);
printf("双精度型 \t%f\n",doubuleNum);
return 0;
}
结果如下:
为啥单精度补了好多个0在后面? 又为啥双精度被截断了?在格式化输出的文章里我们再详述
3.4 布尔型
布尔型。表示真或假的类型,比如true、false。
为啥需要这么个数据类型? 因为逻辑判断,条件控制比较方便。
C 语言标准(C89)没有定义布尔类型,所以 C 语言判断真假时以 0 为假,非 0 为真。
C 语言标准(C99)提供了_Bool 型,但_Bool只能赋值为 0 或 1 。所有非 0 的值都会存储为1 。(如果想使用true和false,只能使用头文件 <stdbool.h> 定义的 bool 类型 )
#include <stdio.h>
int main()
{
printf("sizeof(_Bool) = %d\n", sizeof(_Bool));
_Bool Key = -1; // 只能使用整数赋值,且0为0,非0为1
if(Key){
printf("成功了!");
}else{
printf("失败了!");
}
printf("\n_Bool的值:%d\n",Key);
return 0;
}
结果为:
#include <stdio.h>
#include <stdbool.h>
int main()
{
printf("sizeof(bool) = %d\n", sizeof(bool));
bool Key = true;
if(Key){
printf("成功了!");
}else{
printf("失败了!");
}
printf("\nbool的值:%d\n",Key);
return 0;
}
结果为:
总结
通过本篇文章,我们较深入的讨论了C语言中的数据类型,并对基本的四种数据类型(整型,浮点型,字符型,布尔型)做了较深入的解释和举例。相信通过本篇的学习,你已经为后续知识打下了坚实的基础,任何复杂的事物都是从简单开始的,四种基本数据类型是以后学习其他复杂结构的基础,计算机就是操作数据的,数据类型就是基础。
下篇文章我们将详细介绍格式化输出,数据类型有了,怎么随心所欲打印出自己想要的结果就很重要了,期待下一篇文章能够与大家讨论清楚这个问题!