首页 理论教育 C语言程序设计:整型数据取值范围及内存占用

C语言程序设计:整型数据取值范围及内存占用

时间:2023-11-23 理论教育 版权反馈
【摘要】:表2-1整型数据取值范围及内存占有情况默认情况下,整型变量都是有符号的,如果是正数或零,那么最高位(符号位)为0,如果是负数符号位为1。

C语言程序设计:整型数据取值范围及内存占用

1.整型常量的表示方法

常量是程序执行过程中数值保持不变的量。程序中到处可以看到常量的身影,如“a=5;”中的5就是常量。常量不需要事先定义,在需要的地方直接写出常量即可。C语言中的常量可以分为整型、浮点型、字符型和字符串型4种。

整型常量就是整常数,包括整型直接常量和整型符号常量。在C语言中,整常数可以用以下3种形式表示。

(1)十进制整常数:十进制整常数没有前缀,其数码为0~9。例如,123、-456等。

(2)八进制整常数:八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。例如,012表示八进制的12,即(12)8,其展开式为1*81+2*80,等于十进制数10。0107表示八进制的107,即(107)8,其展开式为1*82+0*81+7*80,等于十进制数71。

(3)十六进制整常数:十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F。例如,0X2A表示十六进制的2A,即(2A)16,其值为2*161+10*160,等于十进制数42。0XFF表示十六进制的FF,即(FF)16,其值为15*161+15*160,等于十进制255。

2.整型变量的分类

C语言的整数类型有不同的取值范围,除了基本整型变量int类型外。根据整数的取值范围及是否带有符号(正负性),分为6种类型,表示方法是在int前加上限定词short、long或unsigned。在Visual C++6.0中,一个整型变量占有4个字节的内存单元(本书以Visual C++6.0为例,以后不再说明),如表2-1所示。

表2-1 整型数据取值范围及内存占有情况

默认情况下,整型变量都是有符号的,如果是正数或零,那么最高位(符号位)为0,如果是负数符号位为1。

整型数据是以二进制补码的形式存储的,正数的补码和原码与正数对应的二进制数相同,而负数的补码计算过程是:先计算出其绝对值的补码,然后除符号位以外的其他位按位取反,最后末位加1。以short类型为例,最高位为符号位,正数部分最大值为0111111111111111,即32767(215-1)。-32767用补码表示为1000000000000001。

对于0,原码+0表示为0000000000000000,-0表示为1000000000000000,而补码中0只有一个编码即0000000000000000,补码比原码多出来的这个编码1000000000000000被规定为-32768,也可以理解为-32767减去1。因此short int类型取值范围为-32768~32767即-215~(215-1)。同理,int类型取值范围为-2147483648~2147483647即-231~(231-1)。

3.整型变量的定义和初始化

C语言程序中所有用到的变量都要“强制类型定义”,格式如下:

类型说明符 变量名表;

(1)类型说明符用来指定变量的数据类型,如char、int、float等。

(2)变量名表是一个或多个变量的序列,若要定义的变量不唯一,它们之间用逗号分开。

(3)类型说明符与变量名表之间至少有一个空格。

变量的定义语句一般放在函数开头部分的声明部分(也可以放在某一段分程序内,但作用域仅限于它所在的分程序,在函数部分具体讲述)。

一般情况下,变量在定义之后,都要给定一个初值,即变量的初始化。C语言中,变量的初始化一般有两种形式。(www.xing528.com)

(1)直接初始化。此时的初始化放在变量定义部分,如下面的语句:

int a=1,b,c=3;

(2)间接初始化。这种形式是在先定义变量之后,通过赋值语句给定值,如下列语句:

int a,b;

a=1;

b=2;

4.整型数据的溢出

根据操作要求的不同,确定变量的类型,这一点非常重要。因为,一旦用某种类型定义了一个变量,系统就会给其分配一定的内存单元,如果定义的类型精度或数据范围不符合要求,就会出现不可预知的错误

【例2-3】程序li_2_2_2。

【程序说明】

(1)定义两个短整型变量a和b。

(2)用赋值语句给a和b赋值,其中,a的值为32767,变量b的值为a+1。

(3)输出b的值。

程序运行结果为:

-32768

为什么32767加1的结果不是32768呢?是因为产生了“溢出”。具体说明如下:

变量a和b的类型为短整型,其中,a的值为短整型中的最大数32767(参考表2-1)。如前面所述,整型数据是以二进制补码的形式存储的(参考2整型变量的分类),a的补码为0111111111111111,加1后变为1000000000000000,即-32768的补码,因此输出b的值为-32768。由于a和b是带符号短整型变量,取值范围为-32768~32767,无法表示大于32767和小于-32768的数,如果超出表示范围,就发生“溢出”,但运行时并不报错,当数据达到最大后,就又从最小数开始计数。这类错误的发现依赖于程序员的经验和细心。如果想让b的值变为32768,则可以将a、b的类型改为int或者long int,使其有更大的取值范围即可。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈