在C语言中,数据类型是指用于声明不同类型的变量或函数的一个广泛的系统。C语言中的数据类型可分为:基本类型、枚举类型、void类型、派生类型。
sizeof 运算符
在C语言中,sizeof 是一种单目运算符,它还是计算大小的数据类型,包括类、结构、共用体和其他用户自定义数据类型。它以字节的形式给出了表达式或类型名的存储大小。我们可以利用 sizeof 运算符来获取 char int short long float double 等类型的大小。下面我们用实例来获取一些常见的整数类型和常见的浮点数类型的储存大小吧!
源代码如下:
#include<stdio.h>
int main()
{
printf("char 存储大小 : %d\n",sizeof(char));
printf("int 存储大小 : %d\n",sizeof(int));
printf("short 存储大小 : %d\n",sizeof(short));
printf("long 存储大小 : %d\n",sizeof(long));
printf("float 存储大小 : %d\n",sizeof(float));
printf("double 存储大小 : %d\n",sizeof(double));
return 0;
}
输出结果如下:
char 存储大小 : 1
int 存储大小 : 4
short 存储大小 : 2
long 存储大小 : 4
float 存储大小 : 4
double 存储大小 : 8
总结一下
1.整数类型
类型
储存大小
取值范围
char
1字节
-27 到 27-1
int
4字节
-231 到 231-1
short
2字节
-215 到 215-1
long
4字节
-215 到 215-1
2.浮点类型
类型
精度
储存大小
取值范围
float
6 位小数
4字节
1.2E-38 到 3.4E+38
double
15 位小数
8字节
2.3E-308 到 1.7E+308
关于整数类型,我再补充一个如何补位0的小案例
题目:给定一个日期(2021-03-03),请输出这个日期(2021-03-03)
看似简单,于是给出以下代码:
#include<stdio.h>
int main()
{
int yy,mm,dd;
printf("请输入年月日:\n");
printf("例如:2021-03-13\n");
scanf("%d-%d-%d",&yy,&mm,&dd);
printf("%d-%d-%d",yy,mm,dd);
return 0;
}
编译运行 输入“2021-03-03”结果如下
2021-3-3
很奇怪,我输入的 “0” 去哪里了?
将上面的第8行代码改成如下
printf("%d-%.2d-%.2d",yy,mm,dd);
再次编译运行输入,发现“0”回来了
为什么?
因为%d是十进制整数占位符,默认情况下不会补0位,又因为日期中的月份和天数最大是两位数,所以将 %d 改成 %.2d 就可以输出这个“0”了。%.2d是指按宽度为2输出,右对齐方式输出。若不够两位,左边补空格。
关于浮点类型,我也来补充一个四舍五入的小案例
题目:输入3.1415926,输出四舍五入后保留三位的小数。
源代码如下:
#include<stdio.h>
int main()
{
float a = 3.141926;
printf("%.3f",a);
return 0;
}
运行编译输出结果:
3.142
%3f 是指输出宽度为3的浮点数,若第四位小数小于等于4则舍去,若第四位小数大于等于5则入一位。
拓展一下,如果我不需要对结果四舍五入,如何取两位小数呢?
核心思路:
将小数扩大1000倍,再将浮点类型强制转换为整数类型,在输出时,将整数类型强制转换为浮点类型,最后除以1000即可。
源代码如下:
#include<stdio.h>
int main()
{
float a = 3.141926;
a *= 1000;
int b = (int)a;
printf("%.3f",(float)b/1000);
return 0;
}
运行编译输出结果:
3.131
void 类型
void 类型指的是没有可用的值,通常有以下三种情况:函数返回为空、函数参数为空、指针指向 void。