黄绍龙
摘要: 该文主要讨论了关于整型变量数据范围的过程式教学方法,并特别分析了一种确定范围下界的易于理解的思路。
关键词:二进制;整型;补码;范围
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)33-0190-02
Abstract: This article talks about the tuition process of integer variable's range, and specially provides the comprehensible way to determine the lower bound.
Key words: binary; integer; two' complement; range
1 讨论整型变量数据范围在《C程序设计》课程中的意义
C语言是一种强类型语言,整型是其中一种重要的数据类型,包含了长整型、整型和短整型等不同字长的类型,它在编程实践中被频繁使用,但学生往往因为忽视所定义的整型变量的范围而产生“溢出”错误,这种错误在程序调试时难于检查。在程序设计课程中,学生耗费大量时间却不能排除错误时,容易产生挫败感,降低学习的积极性。
究其原因,在于教师讲解整型数据表示范围时重结论轻过程,没有采用合理的过程式教学方法去化解知识难点,为后续的学习留下隐患。因此,本文将讨论一种易于学生理解和掌握的该知识点的教学方法。
2 整型数据的补码表示方法
利用补码表示带符号整型数据的好处是可以将整数的加法和减法运算统一用加法器实现。带符号整型数据补码表示的最高位是符号位,0代表正整数,1代表负整数,其他位表示数值位。正整数的補码是它对应的二进制形式。求负整数补码的方法是:①求出该负数绝对值的二进制形式;②按位取反;③加1。例如,求-12的补码(以16个比特位表示):
-12的绝对值12的二进制形式:0000 0000 0000 1100
按位取反: 1111 1111 1111 0011
加1得到-12的补码形式: 1111 1111 1111 0100
3 固定比特数的整型数据范围的确定方法
先以16个比特位表示的带符号整型数据为例进行讨论,然后推广到n个比特位的情况。
1) 最大正整数(上界)的确定方法
由于是正整数,最高位(符号位)为0。若要使它表示最大正整数,则剩余的15个比特位的每一位都应取该位能够取得的最大值。每个二进制位能取得的最大值是1,因而最大正整数的二进制形式是:最高位是0,剩下的15位全是1,即0111 1111 1111 1111,它的值是[215-1=32767]。
2) 最小负整数(下界)的确定方法
由于是补码表示,最小负整数的二进制形式不像最大正整数那样容易确定,故我们希望找到相邻负整数对应补码存在的规律,进而推断出最小负整数补码的二进制形式。我们可以做如下分析:
根据求负整数补码的方法计算-1、-2和-3的补码形式,可得:
-1的补码是:1111 1111 1111 1111
-2的补码是:1111 1111 1111 1110
-3的补码是:1111 1111 1111 1101
[(-2)=(-1)-1,(-3)=(-2)-1],这是我们已有的知识。那么负整数的补码是否也有类似的性质呢?通过观察容易看出:-2的补码可以看做是由-1的补码减去1得到的,且-3的补码是-2的补码减去1得到的。若这个规律成立,我们猜想-4的补码形式应是:1111 1111 1111 1100,即用-3的补码减去1得到。我们可以用求负数补码的方法计算-4的补码进行验证,求得的结果与上述形式是一样的。
因此,我们得出这样一个结论:一个负整数的补码减去1得到与它相邻的更小负整数的补码。
根据上述结论,参考-1的补码,最小负整数的补码形式应该是:除了最高符号位的1被保留外,数值位上的1全部被减去,即1000 0000 0000 0000。这个补码对应的值可以通过求负整数补码方法的逆方法得到,值是[-215=-32768]。
所以,16个比特位表示的带符号整型数据的范围是:[-32768]~[32767],即[-215]~[(215-1)],也即[-216-1]~[(216-1-1)]。
类比可知,n个比特位表示的带符号整型数据的范围是:[-2n-1]~[(2n-1-1)]。
4 结论
我们通过确定带符号整型数据上、下界过程的讲解,特别是观察并确定相邻负整数补码间的关系进而得到下界的补码形式,使该知识点的教学过程完整地呈现在学生面前,更加易于理解和接受,并不仅仅是给出结论。这样在后续程序设计的学习和实践过程中,“整型数据是有范围的”这一概念也会给他们留下深刻的印象,从而在很大程度上避免了“溢出”错误的发生。
参考文献:
[1] 白中英.计算机组成原理[M].北京:科学出版社,2002.
[2] 谭浩强.C程序设计[M].3版.北京:清华大学出版社,2005.