各数据类型在各操作系统下的字节数
数据类型占位符
No. | 类型 | 占位符 |
---|---|---|
1 | char | %c |
2 | short | %hd |
3 | int | %d |
4 | long | %ld |
5 | long long | %lld |
6 | float | %f |
7 | double | %lf |
8 | long double | %Lf |
数据类型的范围
类型 | 数据范围 | 表示 |
---|---|---|
char | -128~127 | -27~27-1 |
short | -32 768~32 767 约3万 | -215~215-1 |
int | -2 147 483 648~2 147 483 647 约21亿 | -231~231-1 |
long long | -9 223 372 036 854 775 808~9 223 372 036 854 775 807 约1020亿 | -263~263-1 |
上面的是通常范围(32位下),实际上有些情况略有出入。总之,类型的表示范围与类型大小存在如下关系:
-2n-1~2n-1-1
n代表数据类型大小
无符号数据类型占位符
No. | 类型 | 占位符 |
---|---|---|
1 | char | %u |
2 | short | %hu |
3 | int | %u |
4 | long | %lu |
5 | long long | %llu |
浮点型数据输出超范围的表示
浮点数据类型可以表示无穷大
No. | 输出 | 含义 |
---|---|---|
1 | inf | 表示正无穷大 |
2 | -inf | 表示负无穷大 |
3 | nan | 不存在 |
浮点数精度
#include <stdio.h>
int main(){
float f = 123456789.0;
double d = 123456789.0;
printf("f=%f\n" ,f);
printf("d=%lf\n",d);
return 0;
}
输出会显示不准确
计算机浮点数存在精度问题。
No. | 类型 | 数字范围 | 有效数字 |
---|---|---|---|
1 | float | -3.4E+38~3.4E+38 | 6~7 |
2 | double | -1.7E-308~1.7E+308 | 15~16 |
3 | long double | -1.2E-4932~1.2E+4932 | 18~19 |
再看输出格式
#include <stdio.h>
int main(){
float f = 123456789.0;
double d = 123456789.0;
printf("f=%5f\n" ,f);
printf("d=%55.6lf\n",d);
printf("d=%55.9lf\n",d);
return 0;
}
可看出小数点前的整数是规定多少位,如果小于输出数据的位数,数据则完整输出,如果大于输出数据的位数,数据则靠右对齐输出,(向左输出则加-),小数点后面是规定输出精度
ASCII编码
ASCII编码使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。
常见的转义字符/逃逸字符
字符 | 含义 | 字符 | 含义 |
---|---|---|---|
’ | 单引号 | " | 双引号 |
\r | 回车 | \n | 换行 |
\b | 退格符 | \f | 翻页符 |
\t | 表格符 | \ | 反斜线符 |
自动转换类型
当运算符左右两边操作数的类型不一致时,会自动转换成较大类型。
整型:char→short→int→long→long long
浮点型:int→float→double→long double
强制转换类型
(需要转换为的类型)值
printf("%d\n",(int)3.14);
加注
科学计数法
表示方式:尾数部分e指数部分或者尾数部分E指数部分
int earth_diameter = 6371;
long long earth_age = 4.55e9;
int sun_diameter = 1.392e6;
long long sun_age = 4.57e9;
long long light_year = 9.46e12;
long long galaxy_diameter = 1e5*light_year ;
long long galaxy_age = 8e9;
long long universe_diameter = 1.6e12*light_year;
long long universe_age = 1.382e11;
printf("earth_diameter = %d\n",earth_diameter);
printf("earth_age = %lld\n",earth_age);
printf("sun_diameter = %d\n",sun_diameter);
printf("sun_age = %lld\n",sun_age );
printf("galaxy_diameter = %lld\n",galaxy_diameter);
printf("galaxy_age = %lld\n",galaxy_age);
printf("universe_diameter = %lld\n",universe_diameter);
printf("universe_age = %lld\n",universe_age);
double electron_diameter = 10e-15;