标签:
C数据类型 |
基本类型 |
数值类型 |
整型 |
短整型short |
整型int |
||||
长整形long |
||||
浮点型 |
单精度型float |
|||
双精度型double |
||||
字符类型char |
|
|
||
构造类型 |
数组 |
|
|
|
结构体struct |
|
|
||
共用体union |
|
|
||
枚举类型enum |
|
|
||
指针类型 |
|
|
|
|
空类型void |
|
|
|
符号属性 |
长度属性 |
基本型 |
位长(字节) |
取值范围 |
输入符 |
输出符 |
-- |
-- |
char |
1 |
-2^7~2^7-1(或0..255,与体系结构有关) |
%c |
%c、%d、%u |
signed |
-- |
char |
1 |
-2^7~2^7-1 |
%c |
%c、%d、%u |
unsigned |
-- |
char |
1 |
0~2^8-1 |
%c |
%c、%d、%u |
-- |
short |
[int] |
2 |
-2^15~2^15-1 |
%hd %hi |
|
signed |
short |
[int] |
2 |
-2^15~2^15-1 |
%hd %hi |
|
unsigned |
short |
[int] |
2 |
0~2^16-1 |
%hu %ho %hx |
|
-- |
-- |
int |
2/4 |
-2^31~2^31-1 |
%d %i |
|
signed |
-- |
int |
2/4 |
-2^31~2^31-1 |
%d %i |
|
unsigned |
-- |
int |
2/4 |
0~2^32-1 |
%u %o %x |
|
-- |
long |
[int] |
4/8 |
-2^31~2^31-1 |
%ld %li |
|
signed |
long |
[int] |
4/8 |
-2^31~2^31-1 |
%ld %li |
|
unsigned |
long |
[int] |
4/8 |
0~2^32-1 |
%lu %lo %lx |
|
-- |
long long |
[int] |
8 |
-2^63~2^63-1 |
%I64d %lld %Ili |
|
signed |
long long |
[int] |
8 |
-2^63~2^63-1 |
%I64d %lld %Ili |
|
unsigned |
long long |
[int] |
8 |
0~2^64-1 |
%I64u %I64o %I64x |
|
-- |
-- |
float |
4 |
+/-3.40282e+038 |
%f %e %g |
|
-- |
-- |
double |
8 |
+/-1.79769e+308 |
%lf %le %lg |
%f、%e、%g |
-- |
long |
double |
8或以上 |
+/-1.79769e+308 |
%Lf %Le %Lg |
|
注意:
1、 表中的每一行,代表一种基本类型。“[]”代表可省略。
2、 char、signed char、unsigned char是三种互不相同的类型;int、short、long也是三种互不相同的类型。
3、 将char/signed char转换为int时,会对最高符号位1进行扩展,从而造成运算问题。所以,如果要处理的数据中存在字节值大于127的情况,使用unsigned char较为妥当。程序中若涉及位运算,也应该使用unsigned型变量。
4、 int的长度,是16位还是32位,与编译器字长有关。
5、 整型数据可以使用%d(有符号10进制)、%o(无符号8进制)或%x/%X(无符号16进制)方式输入输出。而格式符%u,表示unsigned,即无符号10进制方式。
6、 整型前缀h表示short,l表示long。输入输出short/unsigned short时,不建议直接使用int的格式符%d/%u等,要加前缀h。(使用相匹配的格式对数据类型进行输入输出)
7、 关于long long类型的输入输出:"%lld"和"%llu"是linux下gcc/g++用于long long int类型(64 bits)输入输出的格式符。而"%I64d"和"%I64u"则是Microsoft VC++库里用于输入输出__int64类型的格式说明。
8、 浮点型数据输入时可使用%f、%e/%E或%g/%G,scanf函数会根据输入数据形式,自动处理。输出时可使用%f(普通方式)、%e/%E(指数方式)或%g/%G(自动选择)。
9、 浮点参数压栈的规则:float(4字节)类型扩展成double(8字节)入栈。在输入时,需要区分float(%f)与double(%lf);在输出时,用%f即可。printf函数将按照double型的规则对压入堆栈的float(已扩展成double)和double型数据进行输出。如果在输出时指定%lf格式符,gcc/mingw32编译器将给出一个警告。
10、 前缀L表示long(double)。虽然long double比double长4个字节,但是表示的数值范围却是一样的。long double类型的长度、精度及表示范围与所使用的编译器、操作系统等有关。
64位整形引起的混乱主要在两方面:一是数据类型的声明,二是输入输出。
首先是如果我们在自己机器上写程序的话,情况分类如下:
(1) 在win下的VC6.0里面,声明数据类型的时候应该写作
__int64 a;
输入输出的时候用%I64d
scanf(”%I64d”,&a);
printf(”%I64d”,a);
(2) 在linux下的gcc/g++里面,数据类型声明写作
long long a;
输入输出时候用%lld
(3) 在win下的其它IDE里面[包括高版本Visual Studio],数据类型声明用上面两种均可。
输入输出用 %I64d
数据类型转换就是将数据(变量、表达式的结果)从一种类型转换到另一种类型。
强制类型转换:由程序员显式进行的转换。
自动类型转换:编译器根据混合运算中不同数据类型隐式地进行数据类型转换。
类型自动转换的规则:
注:
1、 char型和short型参与运算时,必须先转换成int型。
2、 在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型将转换为左边变量的类型。如果右边表达式的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。
标签:
原文地址:http://www.cnblogs.com/Wubg/p/5808635.html