关于c语言基础知识的问题

对任何一个二维数组的元素都鈳以用数组名唯一地加以确定。对还是错求解释。

}

c语言基础知识程序设计中关于补碼的几个问题的探讨 摘 要:在c语言基础知识程序设计教学过程中根据Turbo C中整型数据类型在内存中的存储形式为补码的特点,巧妙引进补码嘚定义公式灵活、简单地解决了初学者难以理解的整型数据取值范围的来源、有符号与无符号类型之间自动转换时输出真值的判定问题,以及在使用求反运算符时如何确定输出真值的问题在实际教学过程中,通过引进补码的概念及其定义公式使学生迅速领会了这些问題的本质。 关键词:c语言基础知识;程序设计;补 码;位运算 1、引言 随着信息技术的发展和计算机知识的普及应用现在大部分高校都在開设计算机程序设计课程,尤其是在各个高校的低年级当中开设具有高级语言和低级语言双重特性的c语言基础知识而且,c语言基础知识吔是学生进一步学习高级程序设计、数据结构和编译原理等课程的基础是进一步学习深造的敲门砖,因此各高校对c语言基础知识的教學也越来越重视。[1]但是笔者在教学的过程当中发现学生对于整型数据表示范围的真正来历以及位运算中的求反运算在Turbo C中运行的结果难以悝解。而补码可以担当解释c语言基础知识程序设计中这些问题的重要角色用它可以以追根溯源的形式揭开它们在内存中的真正面目,使學生既加深对补码的认识又真正领会这些问题的本质 2、原码、反码、补码 在描述问题之前,我们先看看原码、反码、补码的有关定义叧外,这里只针对Turbo C中整型数据类型来加以讨论 (1)原码表示法 原码表示是一种比较直观的机器数的表示方法:约定数码序列中的最高位為符号位,符号位为0表示该数为正为1表示该数为负,其余有效数值部分则用二进制的绝对值表示而且,原码定点整数表示的范围为:-(2n-1)~2n-1[2] (2)反码表示法 正数的原码与反码相同,负数的反码为正数的数码序列中除去最高位以外所有位逐位取反即二进制编码序列中0变為1,1变为0 (3)补码表示法 补码表示方法是:如果为正数,则原码与补码的表示形式相同;如果数为负则将负数原码除符号位外其余各位取反,末位加1即得负数的补码。而且对于定点整数X(其补码表示的范围为-2n~2n-1)[2],数X的补码记作 当机器字长为n时,补码定义如公式(1-1): 另外在原码、反码、补码相互转换的规则中,可以遵循这样的规则:反码的反码是原码补码的补码是原码。 3、整型数据类型取值范围的确定 int、unsigned long三种各自在内存中所占存储空间分别为2字节、2字节、4个字节。另外Turbo C当中整型数在内存在是以补码的形式存储的。那么丅面我们讨论大多数教材(这里以文献[3]为例)当中int型取值范围-的来历及有符号与无符号之间数据类型自动转换所得结果的确定。 对于int类型由于我们知道原码定点整数表示的范围为:-2n~2n-1,即-通过原码到补码的简单转换便可得知这些数据在内存中的实际存储方式。而对于-32768超絀了原码定点整数表示的范围-,那么对于初学者来说,这个-32768就像是无中生有的数捉摸不透。由于整型数在内存在中是以二进制补码的形式存储的那么,我们可以借助公式(1-1)来求出-32768的补码进而写出它在内存中的二进制形式。根据公式(1-1)我们可以得到 其二进制形式为00 0000,即十进制的215根据2中介绍的“补码的补码是原码”的规则可知其反码为11 1111,其原码为00 0000(所进高位被丢弃符号位不变),由于原码中-0(00 0000)和+0(00 0000)在内存中的表示形式统一为 0000(补码)(具体参见文献[3]Page257)因而,可以理解为-32768占用-0的存储空间而且,在实际应用当中由于整型数是以补码的形式而存储于内存中,所以只需按照公式(1-1)求出该数的补码便可得知其在内存中的存储方式而大可不必追究其原码的表示形式(因为,我们关注的重点是一个数在内存中的存储方式)另外,利用公式(1-1)求出一个数的补码之后同时也解决了有符号向無符号(或无符号向有符号)自动转换时输出结果的确定问题,考察例子Exa1程序段如下: C环境下输出结果为一随机整数。其实我们按照公式(1-1)求出num表示的补码然后写出其在内存中存储的二进制形式00 0000,显然它没有超出范围而表示无符号整型中的32768同理,对于无符号整型变量num1可以知道其在内存中的存储形式为00 0000,当转换为有符号输出时则最高位1表示该数为负数(负数的符号位为1,因为按照2中有关原码、反碼、补码的转换规则原码转换到补码的过程中,符号位不变而正数的补码的最高位始终为0),根据公式(1-1)可以反过来求出数 即输絀结果为-32768;同理,对于无符号整型变量num2可以知道其在内存中的存储形式为11 1111,当转换为有符号输出时则最高位1表示该数为负数,根据公式(1-1)可以反过来求出数 即输出结果为-1。同样地对于其它几种整型类型取值范围也可按此来推理。 4、 求反运算符(~)的应用 ~是一个单目运算符用来对一个二进制数按位取反。这里有两点值得初学者注意一是:~的操作数只能是整型或字符型的数据,它们在内存中都是鉯补码的形式存储的二是:求反运算符会对内存中存储的补码的包括最高位在内的所有位按位取反,而且求出的反码表示的也是内存Φ存储的二进制补码。考察例子Exa2

回答者:c语言基础知识程序设计中关于补码的几个问题的探讨 -

第一位的是符号位,这是规定.

回答者:第一位嘚是符号位,这是规定. http: -

补码的具体定义及解释网上一搜就搜得到。 我只会一个十进制负数转二进制的方法里面涉及到了补码,最高位 仳如说-4. 4的二进制形式是100 前面补零 就是00 0100 最高位是左边第1位。 因为是负数最高位就要反过来。变成1 则原式 00 0100 第一位为符号位为什么这个具体嘚解释我也不能说明白。只能说到这样了 不懂的话可以到网上去查

回答者:补码的具体定义及解释。网上一搜就搜得到 -

}

我要回帖

更多关于 c语言基础知识 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信