C语言数据类型

2018-06-18 04:16:10来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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位整数全解

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、 在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型将转换为左边变量的类型。如果右边表达式的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:C语言转义字符

下一篇:表达式之谜