数据类型
整理下C语言中数据的类型,放两张百度的图。
整型
有符号的一般说int、short、long、longlong四种,前面加上signed,一般省略,longlong我没咋看到过(太菜了)不讲了。无符号是用unsinged表示,没有方向,表示数量,无符号数不可能是负数。
1.int 整型
int是4个字节,-2(32-1) – 2(32-1)-1 (即 -2147483648 ~ 2147483647)
printf打印输出%d
2.short 短整型
数据类型大小是 2 字节,能表示的数值范围是
-2(16-1)– 2(16-1) -1 (即 -32768 ~ 32767)
打印类型是 %hd ,
3.long 长整型
数据类型大小是 4 字节,能表示的数值范围是
-2(32-1) – 2(32-1)-1 (即 -2147483648 ~ 2147483647)
打印类型是 %ld
longlong的%lld
打印这三种还是要规范写%d、%hd、%ld、%lld,不过都用%d也可以打印出来,但是会给程序移植带来麻烦(我没懂。。。。。。)
无符号的就不说了,看上图应该就够了。
#include <stdio.h>
int main(){
//整型
int idata = 10;
short sdata = 20;
long ldata = 30;
long long lldata = 40;
unsigned int uidata = 50;
unsigned short usdata = 60;
unsigned long uldata = 70;
unsigned long long ulldata = 80;
printf("%d\n",idata);//10
printf("%hd\n",sdata);//20
printf("%ld\n",ldata);//30
printf("%lld\n",lldata);//40
printf("%u\n",uidata);//50
printf("%hu\n",usdata);//60
printf("%lu\n",uldata);//70
printf("%llu\n",ulldata);//80
return 0;
}
字符型
字符型的就是存储一个字节的单一字符,系统是通过字符的ASCLL码(大家可以看看对照下)来识别,比如A的ascll是65,a的ascll是97,大小写差32。
有符号的数值范围表示为-128~127;无符号的是0 ~ 255。打印的时候%c。
浮点型
float 单精度浮点型
单精度浮点型的大小是 4 字节
打印是%f , 系统默认保留 6 位小数,不足充0。
比如:float fdata = 9.623;
printf(“%f”,fdata);显示9.623000
double 双精度浮点型
双精度浮点型的大小为 8 字节
打印是%lf , 系统默认保留 68位小数,不足充0。
当我们选择保留几位小数的时候,可以使用 %m.nlf 来控制小数点后面的位数。当m超过该数值的位数时,会自动在前面补充空格,同理,n超过该数值小数点后面的位数时,会自动充0。
举例:
double num;
num = 3.1415;
printf("%5.2lf\n",num);
printf("%.2lf\n",num);
printf("%.6lf\n",num);
/*结果: 3.14//3前面有一个空格
3.14
3.141500
*/
%m.nf和%.nf的区别
%m.nf,m是包括小数点的数据宽度,n是小数点之后的位数;m过大,左边会补充空格,m过小,会按照实际数值输出
%.nf 总长度不限,小数点后面保留n位,不足补零
需要注意的是:
%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。
其中:
float,单精度浮点型,对应%f。double,双精度浮点型,对应%lf。
单精度浮点数有效数字保证6位,部分7位,双精度浮点数有效数字保证15位,部分16位。
1.在用于输出时:
float类型可以使用%lf格式,但不会有任何好处。
double类型如果使用了%f格式可能会导致输出错误。
2.在用于输入时:
double 类型使用了%f格式,会导致输入值错误。
float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃。
所以在输入输出时,一定要区分好double和float,而使用对应的格式符号。
#include <stdio.h>
int main(){
//字符、浮点
char cdata = 'a';
char ccdata = 'A';
float fdata = 9.632;
double ddata = 3121238.236213;
printf("%c ",cdata);
printf("%d\n",cdata);
printf("%c ",ccdata);
printf("%d\n",ccdata);
puts("============");
printf("%11.5f\n",fdata);
printf("%11.9lf\n",ddata);
return 0;
//结果如下
/*
a 97
A 65
============
9.63200
3121238.236213000
*/
}