1、整数上溢,浮点数上溢、下溢:
int a;
float b,c;a = 2147483647;b = 3.4E38*100.9f;c =3.4E-39;
printf ("int overflow is %d\n", a+1);// 整数上溢
printf ("float upflow is %f\n", b);// 浮点数上溢
printf ("float downflow is %f\n", c);// 浮点数下溢
注意:
(1)float的有效数只有6~7位,在实际应用中,若坐标精度要求较高尽量使用double,以免因为精度损失带来Bug。
(2)声明变量尽量给出初始化值,如int a = -1;
2、类型转换:
表达式中:有符号和无符号的 char 和 short 都将自动转换为 int 型;赋值语句中:计算结果被转换为将要被赋值的那个变量类型;(按左值类型)函数传参中:char 和 short 转换为 int 型,float 转换为 double 型 ;类型 通常Size(字节) 范围bool 1 0,1
char 8 -2^8~2^8-1
short 16 -2^16~2^16-1
int 32 -2^32~2^32-1
long 32 -2^32~2^32-1
long long 64 -2^64~2^64-1
float 32 -3.4E+38~3.4E+38
double 64 -1.79E+308~1.79E+308
long double 64 -1.79E+308~1.79E+308
float f = 1.2f; //这里f告诉编译器,这个数就是float;如果没有f,编译器默认是double,强制转换为float。
3、存储方式:
整 数:二进制;
浮点数:小数部分+整数部分,分别存储。损失更多精度,运算速度比整数慢;
float :8位存储指数及符号部分,24位存储非指数部分(尾数或有效数);
double:8位存储指数及符号部分,56位存储非指数部分(尾数或有效数);(不同进制的数值不影响存储方式。)
double : printf("%lf"), scanf("%lf" ) ; %e 打印指数记法;float : printf("%f"), scanf("%f" ) ; %e 打印指数记法,p表示为 2 的指数;int :printf("%d"), scanf("%d" ) ; printf() 常量不用加“” ,printf("%d", 2);%0 、%#0 八进制,%x、%#x、%#X 十六进制; 用 %d 显示float值,不会转换为近似的int值,而是显示垃圾值;
4、C的数据关键字:(7+2+3个)
short(16,%hd,%ho) | int(32,%d) | long(32,%ld,%lo) | unsigned(%u) | char(8,&c) | float(32,%f) | double( 64,%lf ) |
signed | void | _bool | _Complex 复数 | _Imaginart 虚数 |
可移植的类型: 类似 uint32_t 不是关键字,需要包含头文件 inttypes.h 。注意:实际应用时尽量使用可移植的数据类型。(__int64只有windows平台才有)
转义字符有待补充!!