C语言的基本数据类型;有点奇怪的是为什么float和double不用signed/unsigned修饰。
符号属性 |
长度属性 |
基本型 |
所占位数 |
取值范围 |
输入符举例 |
输出符举例 |
-- |
-- |
char |
8 |
-2^7 ~ 2^7-1 |
%c |
%c、%d、%u |
signed |
-- |
char |
8 |
-2^7 ~ 2^7-1 |
%c |
%c、%d、%u |
unsigned |
-- |
char |
8 |
0 ~ 2^8-1 |
%c |
%c、%d、%u |
[signed] |
short |
[int] |
16 |
-2^15 ~ 2^15-1 |
%hd |
|
unsigned |
short |
[int] |
16 |
0 ~ 2^16-1 |
%hu、%ho、%hx |
|
[signed] |
-- |
int |
32 |
-2^31 ~ 2^31-1 |
%d |
|
unsigned |
-- |
int |
32 |
0 ~ 2^32-1 |
%u、%o、%x |
|
[signed] |
long |
[int] |
32 |
-2^31 ~ 2^31-1 |
%ld |
|
unsigned |
long |
[int] |
32 |
0 ~ 2^32-1 |
%lu、%lo、%lx |
|
[signed] |
long long |
[int] |
64 |
-2^63 ~ 2^63-1 |
%I64d |
|
unsigned |
long long |
[int] |
64 |
0 ~ 2^64-1 |
%I64u、%I64o、%I64x |
|
-- |
-- |
float |
32 |
+/- 3.40282e+038 |
%f、%e、%g |
|
-- |
-- |
double |
64 |
+/- 1.79769e+308 |
%lf、%le、%lg %f、%e、%g |
|
-- |
long |
double |
96 |
+/- 1.79769e+308 |
%Lf、%Le、%Lg |
基本类型转换有以下规则:
1. 当有符号数与无符号数同类型进行运算时,会自动转化为无符号数进行运算;此时负数会用它的补码进行运算。
2. 当不同类型数据进行运算时,会自动转换为高类型,具体转换规则如下。
(为防止精度损失,类型总是被提升为较高的类型。)
3. 赋值时:等号右边表达式的值的类型自动隐式地转换为左边变量的类型,并赋值给它;高类型向低类型赋值时,精度丢失,长度变短。
4. 函数调用时:将实参的值传递给形参,系统首先会自动隐式地把实参的值的类型转换为形参的类型,然后再赋值给形参。
5. 函数有返回值时:系统首先会自动隐式地将返回表达式的值的类型转换为函数的返回类型,然后再赋值给调用函数返回。