C语言基本数据类型

来源:互联网 发布:淘宝潮男装店铺排行 编辑:程序博客网 时间:2024/04/28 00:07

C语言中基本的数据类型有char、short、int、long 、float、double,在32位系统下,其占据的内存空间分别为:

类型

char

short

int

long

float

double

大小(字节)

1

2

4

8

4

8

现在主要对char、int、float这三种常用的数据类型进行讨论,其他数据类型是这三种类型的简单延伸,下面的实验是在32位x86平台下进行的。

首先计算机中存放有符号数据是以补码的形式存储的,正数的补码还是本身,负数的补码是源码取反后加1。这样做的好处是

l  可以让符号位参与运算,计算机不会区别有符号数还是无符号数,统一对数据进行运算,这样采用补码的话,减法运算可以转化为加法运算,提高了速度。

l  如果不采用补码的话,char型0的机器数编码会有2个,(+0)00000000和(-0)10000000,这样进行数据运算会产生矛盾,而采用补码的话二进制10000000表示(-128)

1.        Int型数据

Int型数据在该平台下占据4个字节,由于X86是小端模式,数据的低字节放入低地址,高字节放入高地址,比如

Int a = 100000;//0x186A0

如下图所示,数据从地址0x0012FF7C开始存放,可以看到最低的低字节0xA0放在最低的地址上,是一种小端模式。

0x0012FF7C

A0

0x0012FF7E

86

0x0012FF7F

01

0x0012FF80

00

0x0012FF81

 

0x0012FF82

 

2.        float型数据

float型数据在该平台下为4个字节,其中各个位的意义如下表所示:

类型

符号位

阶码

尾数

长度

float

1

8

23

32

下面以float数据12.8来说明:

12.8表示成二进制数为1100.11001100110011001101,为了确定阶码,需要对其进行移位,直到小数点位于第一个1后面,12.8的小数点需要左移3位,IEEE规定float型阶码=127+移位值,当左移时,移位值为正数,当右移时,移位值为负数。这里阶码=127+3=130=1000001

尾数是移位后小数点之后的的23位,为10011001100110011001101

所以float型数据12.8的机器码为:

0-1000001-10011001100110011001101

其十六进制表示为0x414CCCCD

其在内存中的表示为

0x0012FF7C

CD

0x0012FF7E

CC

0x0012FF7F

4C

0x0012FF80

41

0x0012FF81

 

0x0012FF82

 

3、char型

char型数据在该平台下为1个字节,这里我们也可以利用char型的数组验证float型数据的存储格式。

char a[4]  =  {0xCD,0xCC,0x4C,0x41};

float *j  =  (float*)a;

printf(“%d\n”,*j);

可以得到*j为12.8

总结:

各个数据类型让数据在内存中有不同的组织形式,利用指针可以对同一段内存区域的数据进行不同的解读。


原创粉丝点击