根据Turbo C中整型数据类型在内存中的存储形式为补码的特点,巧妙引用补码的定义公式
第22卷
2008年5月甘肃联合大学学报(自然科学版)
JournalofGansuLianheUniversity(NaturalSciences)Vol.22 May2008
文章编号:1672 691X(2008)05 0001 03
C语言程序设计中关于补码的几个问题的探讨
向万里1,王智勇2
(1.兰州交通大学交通运输学院,甘肃兰州730070;2.吉首大学师范学院教务处,湖南吉首416000)摘 要:在C语言程序设计教学过程中,根据TurboC中整型数据类型在内存中的存储形式为补码的特点,巧妙引进补码的定义公式,灵活、简单地解决了初学者难以理解的整型数据取值范围的来源,有符号与无符号类型之间自动转换时输出真值的判定问题,以及在使用求反运算符时如何确定输出真值的问题.在实际教学过程中,通过引进补码的概念及其定义公式,使学生迅速领会了这些问题的本质.关键词:C语言;程序设计;补码;位运算中图分类号:TP311 文献标识码:A
0 引言
随着信息技术的发展和计算机知识的普及应用,现在大部分高校都在开设计算机程序设计课程,尤其是在各个高校的低年级当中开设具有高级语言和低级语言双重特性的C语言.而且,C语言也是学生进一步学习高级程序设计、数据结构和编译原理等课程的基础,是进一步学习深造的敲门砖,因此,各高校对C语言的教学也越来越重视
[1]
1.2 反码表示法
正数的原码与反码相同,负数的反码为正数的数码序列中除去最高位以外所有位逐位取反,即二进制编码序列中0变为1,1变为0.1.3 补码表示法
补码表示方法是:如果为正数,则原码与补码
的表示形式相同;如果为负数,则将负数原码除符号位外其余各位取反,末位加1,即得负数的补码.而且,对于定点整数X(其补码表示的范围为-2n~2n-1)[2],数X的补码记作[X]补,当机器字长为n时,补码定义如公式(1)
[X]补=
X,0 X 2
n
n-1
.但是,笔者在教学的过程当中发现学生对
于整型数据表示范围的真正来历以及位运算中的求反运算在TurboC中运行的结果难以理解.而补码可以担当解释C语言程序设计中这些问题的重要角色,用它可以以追根溯源的形式揭开它们在内存中的真正面目,使学生既加深对补码的认识又真正领会这些问题的本质.
-1; X 0.
2-|X|,-2
n-1
(1)
另外,在原码、反码、补码相互转换的规则中,可以遵循这样的规则:反码的反码是原码,补码的补码是原码.
1 原码、反码、补码
在描述问题之前,我们先看看原码、反码、补码的有关定义.另外,这里只针对TurboC中整型数据类型来加以讨论.1.1 原码表示法
原码表示是一种比较直观的机器数的表示方法:约定数码序列中的最高位为符号位,符号位为0表示该数为正,为1表示该数为负,其余有效数值部分则用二进制的绝对值表示.而且,原码定点整数表示的范围为:-(2n-1)~2n-1[2].
收稿日期:2007 12 24.
2 整型数据类型取值范围的确定
在TurboC当中(这里所用的TurboC为BorlandInternational,inc.的TurboC,Version2.01),整型类型分为有符号和无符号两类.其中有符号的有分为short、int、long三种,用sizeof运算符可以求出它们各自在内存中所占存储空间分别为2字节、2字节、4个字节;无符号也分为unsignedshort、unsignedint、unsignedlong三种,各自在内存中所占存储空间分别为2字节、2字节、4个字节.另外,TurboC当中整型数在内
作者简介:向万里(1978 ),男(土家族),湖南永顺人,兰州交通大学讲师,硕士,主要从事计算机应用的教学研究.