C语言基本数据类型

来源:互联网 发布:足球大师独狼捏脸数据 编辑:程序博客网 时间:2024/05/16 19:04

C语言中的基本数据类型包括:整型,字符型,浮点型(单精度型、双精度型),枚举类型。

一、整型数据:

(一)整型常量:即整常数。十进制整型常数,如123-123;八进制整数,以0开头的数是八进制数,如0123表示八进制数123等于十进制数83;十六进制整数,以0x开头的数是十六进制数,如0x123,代表十六进制数123

(二)整型变量:整型数据在内存中是以二进制形式存放的。一般的编译系统为一个整型变量在内存中分配2个字节的存储单元(不同的编译系统为整型数据分配的字节数是不同的,Visual C++6.0 分配4个字节,Turbo C 2.0分配2个字节)。图1是数据(以10为例)在内存中实际存放的情况。

 

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

                                                                                 1

实际上,数值是以补码(complement)表示的。一个正整数的补码和该数的原码(该数的二进制形式)相同。负数的补码是将该数的绝对值的二进制形式按位取反再加1.在存放整数的存储单元中,最左面的一位是表示符号的,该位是0,表示数值为正,该位为1则表示数值为负。

整型变量的基本类型符为int。可以根据数值的范围将变量定义为基本整型(int)、短整型(short int short)或长整型。

一个int型的变量值的范围为-3276832767

[]

 

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

32767在内存中的表示形式,最高位为0,后15位全为1,加1后变成第一位为1,后面15位全为0。如下图

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

这是 -32768的补码形式。所以一个整型变量只能容纳-3276832767范围内的数,这也是为什么整型变量上下限不同的原因。如果发生溢出,运行时不会报错,需要根据经验判断。

 

为了充分利用变量的值的范围,可以将变量定义为unsigned 类型,指定为“无符号数”,如果加上修饰符signed,则指定为“有符号数”。Signed可以省略。

如果不指定unsigned或指定signed,则存储单元中最高位代表符号。如果指定unsigned,为无符号型,存储单元中全部二进位用作存放数本身,所以无符号型数不能存放负数,其取值范围为065535

关于如何决定使用哪种整数类型:如果可能用到很大的数值(大于32767或小于32768),就使用long型。否则,如果空间很重要(例如有很大的数组或很多的结构),就使用short型。除此之外,就用int型。如果定义明确的溢出特征很重要而且负值无关紧要,或者希望在操作二进制位和字节时避免符号扩展的问题,就使用对应的unsigned类型。

根据ANSI C 的规定,可以在头文件<limits.h>中找到特定机器下各种数据类型的最大值和最小值。

基本类型

最小尺寸(位)

最小值(signed

最大值(signed

最大值(无符号)

char

8

-127

127

255

short

16

-32768

32767

65535

int

16

-32768

32767

65535

long

32

-2147483648

2147483647

4294967295

 

二、浮点型数据

一个浮点型数据一般在内存中占4个字节(32位)。浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。

 

3.14159为例

+

.314159

1

数符+                                                                         小数部分                                                                 指数

 

不少C语言编译系统以24位表示小数部分(包括符号),以8位表示指数部分(包括指数的符号)。小数部分占的位越多,数的有效数字越多,精度也越高。指数部分占的位数越多,则能表示的数值范围越大。

 

类型

位数

有效数字

数值范围

float

32

6~7

-3.4*10^-38~3.4*10^38

double

64

15~16

-1.7*10^-308~1.7*10308

long double

128

18~19

-1.2*10^-4932~1.2*10^4932

浮点数据的舍入误差问题:

由于浮点型变量是由有限的存储单元组成的,因此能提供的有效数字是有点的。在有效位以外的数字将被舍去。有可能产生一些误差。

例:

#include<stdio.h>

int main()

{

  floata,b;

  a=123456.789e5;

  b=a+20;

  printf("%f/n",b);

}

程序运行时输出b的值和a的值相等,原因是:a的值比20大很多,a+20的理论值是12345678920,而一个浮点型变量只能保证的有效数字是7位,后面的数字是无意义的,因此不能准确表示该数。运行程序得到a和b的值都是12345678848.000000,可以看到,对这个数来说,前8位是准确的,后几位是不准确的。

三、字符型数据

(一)、字符变量

将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中,二十将该字符的相应的ASCII代码放到存储单元中,这样与整数的存储形式类似,所以字符型数据和整型数据之间可以通用。一个字符数据可以以字符形式输出,也可以以整数形式输出。

(二)、字符串常量

[注:]不能把一个字符串常量赋给一个字符变量。

C规定:在每一个字符串常量的结尾加一个字符串结束标志‘/0’(ASCII码为0的字符,即空操作字符,不引起任何操作动作,也不是一个可显示的字符)。

在C语言中没有专门的字符串变量(与java不同),如果想将一个字符串存放在变量中以便保存,必须使用字符数组。

原创粉丝点击