探讨《C语言》学习中补码的计算方法.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
探讨《C语言》学习中补码的计算方法.doc

探讨《C语言》学习中补码的计算方法 吴秀英 (江西环境工程职业学院 江西 赣州 341000) 摘要:补码是C语言学习中的一个重点和难点,如何能够快速准确地计算出各个数的补码值得我们探讨。本文从补码的意义入手,采用逆向逻辑思维,分别提出了“定义法”、“查零法”、“零减法”和“找1法”4种补码计算的方法,从而使补码的学习变得简单易懂。 关键词:补码计算 逆向逻辑思维 定义法 查零法 零减法 找1法 学习C语言的时候,很多人都有一个共同的感受就是补码的计算非常麻烦,而且容易出错。有哪些方法可以快速并且准确地计算出某个数的补码呢?针对这个问题,我们从原码、反码和补码的概念入手,论述了补码提出的意义,并由此总结了补码计算的4种方法,希望能对大家有所帮助。 一、什么是原码、反码和补码 我们知道,在计算机内部存储的带符号数都是以补码形式存储,用补码形式进行运算的。什么是一个数的补码?为什么要用补码?这要从数的原码、反码开始讲。我们以整型数为例,且假定字长为8位。 原码 整数X的原码是指:其符号位为0表示正,为1表示负;其数值部分就是X的绝对值的二进制数。X的原码通常用【X】原表示。如: 【+100】原 【+0】原【-100】原 【-0】原 注意:在原码中,零有两种表示形式。 原码表示法简单易懂,与真值(带符号数本身)转换方便,只要符号还原即可,但当两个正数相减或不同符号数相加时,必须比较两个数哪个绝对值大,才能决定谁减谁,才能确定结果是正还是负,所以原码不便于加减运算。 反码 X的反码是指:对于正数,反码与原码相同;对于负数,符号位不变,其数值位X的绝对值取反(1变0,0变1)。X的反码通常用【X】反来表示。如 【+100】反 【+0】反【-100】反 【-0】反注意:在反码中,零也有两种表示形式。 反码运算也不方便,通常用来作为求补码的中间过渡。 补码 X的补码是指:对于正数,补码与原码相同;对于负数,符号位不变,其数值位X的绝对值取反后在最低位加1。X的补码通常用【X】补来表示,实际上,【X】补=【X】反+1。如: 【+100】补 【+0】补【-100】补 【-0】补注意:在补码中,零有唯一的编码,【+0】补=【-0】补 补码运算简单方便,符号位可以作为数据的一位参与运算,不必单独处理;二进制的减法可用其补码的加法来实现,简化了硬件电路。 二、补码的意义 首先,我们来看几个例子。 【例子1】用8位二进制数分别表示+0和-0 。 解:我们知道,对于有符号数,我们规定最高位为符号位,0表示正数,1表示负数。剩余位为数值位,用来表示数的大小。 所以+0就表示为0000 0000,而-0表示为1000 0000。 【例子2】计算9-6的结果。 解:我们知道:9-6=9+(-6)=3 0000 1001 +1000 0110 1000 1111 结果为-15,明显不对。 而如果我们采用补码来进行计算呢? 我们知道,9的补码是0000 1001,-6的补码重新进行运算, 0000 1001 +1111 1010 1 0000 0011 最高位的1溢出,剩余8位二进制表示的是3的补码。结果为3,正确。 【例子3】分析程序运行结果。 main() {int a=100,b=-1; Printf(“a=%d,%x,%o,%u\n”,a,a,a,a); Printf(“b=%d,%x,%o,%u\n”,b,b,b,b);} 运行结果: a=100,64,144,100 b=-1,ffff,177777,65535 【例子1】中,为什么同样一个0有两种不同的表示方法呢? 【例子2】中,为什么第一种计算方法会错,而用补码计算结果才对呢? 而【例子3】中,为什么-1以十六进制、八进制以及无符号整型输出的结果分别变成了ffff,177777,65535? 这是因为在计算机系统中,数值一律用补码来表示(存储主要原因:将符号位和其它位统一处理;减法加法两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。(1)正数的补码:与原码相同。   【例1】+9的补码 (2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。   【例2】求-的补码。   因为给定数是负数,则符号位为“1”。   后七位:+的原码(0001)→按位取反

文档评论(0)

资料 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档