C中的数据存储形式

来源:互联网 发布:matlab网络仿真 编辑:程序博客网 时间:2024/05/19 08:45

首先介绍一下原码、反码和补码的概念:

原码:符号位用0表示正号,用1表示负号,数值一般用二进制形式表示。

反码:正数的反码与原码相同,负数的反码是对原码(除符号位)按位取反。

补码:正数的补码与原码相同,负数的补码是对它的原码(除符号位外)各位取反,并在末位加1而得到的(或者说是原码的绝对值按位取反后在末位加1)。

注意0用原码有两种表示方法:00…0+0)或100…0-0,用反码有两种表示方法:00…0111…1,用补码只有一种表示方法:000…0

 

下面介绍一个各种数据类型的存储形式:

1.  整形数据

采用补码形式存放在内存中。对于int型数据,如果不指定unsigned或指定signed,则存储单元中最高位代表符号(0位正,1位负);如果指定unsigned,为无符号型,存储单元全部二进位用作存放数据本身,而不包括符号。

下面是常见的数的存储形式:

有符号整形变量a = 32767

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

符号位

有符号整形变量a = -32768

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

符号位

(注意:int型范围(特指在Turbo C中)是-32768~32767,因此32767+1之后并不是32768,却变成了-32768,可以看出10…0的确是-32768的补码)

无符号整型变量b = 65535:

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

代表数据的第1

(注意:无符号型相对于符号型变量来说,其正数范围扩大一倍)

2.  实型数据

实型变量有2中表示方法,小数形式和指数形式(123e3123E3,注意e/E之前必须有数字,后面指数必须为整数)。在内存中,实数形式是按照指数形式存储的,系统把一个实数数据分成小数部分和指数部分分别存放。

3.  字符常量

字符常量是把它对应的ASCII码(整形变量)值放在内存中(最终是二进制)。