【2017年整理】探讨《C语言》学习中补码的计算方法

上传人:豆浆 文档编号:1054145 上传时间:2017-05-26 格式:DOC 页数:4 大小:35.50KB
返回 下载 相关 举报
【2017年整理】探讨《C语言》学习中补码的计算方法_第1页
第1页 / 共4页
【2017年整理】探讨《C语言》学习中补码的计算方法_第2页
第2页 / 共4页
【2017年整理】探讨《C语言》学习中补码的计算方法_第3页
第3页 / 共4页
【2017年整理】探讨《C语言》学习中补码的计算方法_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《【2017年整理】探讨《C语言》学习中补码的计算方法》由会员分享,可在线阅读,更多相关《【2017年整理】探讨《C语言》学习中补码的计算方法(4页珍藏版)》请在金锄头文库上搜索。

1、探讨C 语言学习中补码的计算方法吴秀英(江西环境工程职业学院 江西 赣州 341000)摘要:补码是 C 语言学习中的一个重点和难点,如何能够快速准确地计算出各个数的补码值得我们探讨。本文从补码的意义入手,采用逆向逻辑思维,分别提出了“定义法” 、 “查零法” 、 “零减法”和“找 1 法”4 种补码计算的方法,从而使补码的学习变得简单易懂。关键词:补码计算 逆向逻辑思维 定义法 查零法 零减法 找 1 法学习 C 语言的时候,很多人都有一个共同的感受就是补码的计算非常麻烦,而且容易出错。有哪些方法可以快速并且准确地计算出某个数的补码呢?针对这个问题,我们从原码、反码和补码的概念入手,论述了补

2、码提出的意义,并由此总结了补码计算的 4 种方法,希望能对大家有所帮助。一、什么是原码、反码和补码我们知道,在计算机内部存储的带符号数都是以补码形式存储,用补码形式进行运算的。什么是一个数的补码?为什么要用补码?这要从数的原码、反码开始讲。我们以整型数为例,且假定字长为 8 位。1、 原码整数 X 的原码是指:其符号位为 0 表示正,为 1 表示负;其数值部分就是 X 的绝对值的二进制数。X 的原码通常用【X】 原 表示。如:【+100】 原 =01100100 【+0 】 原 =00000000【-100】 原 =11100100 【-0】 原 =10000000注意:在原码中,零有两种表示

3、形式。原码表示法简单易懂,与真值(带符号数本身)转换方便,只要符号还原即可,但当两个正数相减或不同符号数相加时,必须比较两个数哪个绝对值大,才能决定谁减谁,才能确定结果是正还是负,所以原码不便于加减运算。2、 反码X 的反码是指:对于正数,反码与原码相同;对于负数,符号位不变,其数值位 X 的绝对值取反(1 变 0,0 变 1) 。X 的反码通常用【X 】 反 来表示。如【+100】 反 =01100100 【+0 】 反 =00000000【-100】 反 =10011011 【-0】 反 =11111111注意:在反码中,零也有两种表示形式。反码运算也不方便,通常用来作为求补码的中间过渡。

4、3、 补码X 的补码是指:对于正数,补码与原码相同;对于负数,符号位不变,其数值位 X 的绝对值取反后在最低位加 1。X 的补码通常用 【X 】 补 来表示,实际上, 【X】 补 =【X】 反 +1。如:【+100】 补 =01100100 【+0 】 补 =00000000【-100】 补 =10011100 【-0】 补 =00000000注意:在补码中,零有唯一的编码, 【+0】补=【-0 】补=00000000。补码运算简单方便,符号位可以作为数据的一位参与运算,不必单独处理;二进制的减法可用其补码的加法来实现,简化了硬件电路。二、补码的意义首先,我们来看几个例子。【例子 1】用 8

5、位二进制数分别表示+0 和-0 。解 : 我 们 知 道 , 对 于 有 符 号 数 , 我 们 规 定 最 高 位 为 符 号 位 , 0 表 示 正 数 , 1 表 示负 数 。 剩 余 位 为 数 值 位 , 用 来 表 示 数 的 大 小 。所 以 +0 就 表 示 为 0000 0000, 而 -0 表 示 为 1000 0000。【例子 2】计算 9-6 的结果。解 : 我 们 知 道 : 9-6=9+(-6)=30000 10011000 01101000 1111结 果 为 -15, 明 显 不 对 。而 如 果 我 们 采 用 补 码 来 进 行 计 算 呢 ?我 们 知 道

6、 , 9 的 补 码 是 0000 1001, -6 的 补 码 是 11111010, 重 新 进 行 运 算 ,0000 10011111 10101 0000 0011最 高 位 的 1 溢 出 , 剩 余 8 位 二 进 制 表 示 的 是 3 的 补 码 。 结 果 为 3, 正 确 。【例子 3】分析程序运行结果。main()int a=100,b=-1;Printf(“a=%d,%x,%o,%un”,a,a,a,a);Printf(“b=%d,%x,%o,%un”,b,b,b,b);运 行 结 果 :a=100,64,144,100b=-1,ffff,177777,65535【

7、例 子 1】 中 , 为 什 么 同 样 一 个 0 有 两 种 不 同 的 表 示 方 法 呢 ?【 例 子 2】 中 , 为 什 么 第 一 种 计 算 方 法 会 错 , 而 用 补 码 计 算 结 果 才 对 呢 ?而 【 例 子 3】 中 , 为 什 么 -1 以 十 六 进 制 、 八 进 制 以 及 无 符 号 整 型 输 出 的 结 果 分 别变 成 了 ffff,177777,65535?这 是 因 为 在 计 算 机 系 统 中 , 数 值 一 律 用 补 码 来 表 示 ( 存 储 ) 。主 要 原 因 :1、 统 一 了 零 的 编 码 ;2、 将 符 号 位 和 其

8、它 数 值 位 统 一 处 理 ;3、 将 减 法 运 算 转 变 为 加 法 运 算 ;4、 两 个 用 补 码 表 示 的 数 相 加 时 , 如 果 最 高 位 ( 符 号 位 ) 有 进 位 , 则 进 位 被 舍 弃 。三、补码的计算1、 定 义 法 :( 1) 正 数 的 补 码 : 与 原 码 相 同 。 【 例 1】 +9 的 补 码 是 00001001。 ( 2) 负 数 的 补 码 : 符 号 位 为 1, 其 余 位 为 该 数 绝 对 值 的 原 码 按 位 取 反 ; 然 后 整 个 数 加1。 【 例 2】 求 -9 的 补 码 。因 为 给 定 数 是 负 数

9、, 则 符 号 位 为 “1”。后 七 位 : +9 的 原 码 ( 0001001) 按 位 取 反 ( 1110110) 加 1( 1110111)所 以 -7 的 补 码 是 11110111。 2、 查 零 法原 码 是 用 1 来 表 示 数 值 的 大 小 , 属 于 正 逻 辑 , 对 原 码 的 计 算 我 们 主 要 是 计 算 1的 个 数 ; 而 反 码 和 补 码 是 用 0 来 表 示 数 值 的 大 小 , 属 于 负 逻 辑 , 所 以 我 们 可 以 采 取 逆向 逻 辑 思 维 来 理 解 , 通 过 计 算 0 的 个 数 来 求 负 数 的 补 码 。 由

10、 于 补 码 是 在 反 码 的 基 础 上加 了 一 个 1, 所 以 0 的 个 数 应 该 比 原 数 的 绝 对 值 小 1。例 如 : 求 -5 的 补 码零 的 个 数 应 为 4 个 , 所 以 -5 的 补 码 为 : 11111011。再 如 : 求 -97 的 补 码零 的 个 数 应 为 96 个 , 96=64+32, 对 应 的 权 值 位 为 0, 其 余 位 为 1。 所 以 -97 的补 码 为 : 10011111。3、 零 减 法负 数 的 补 码 =全 零 -正 数 的 原 码 , 如 -5 的 补 码 =0-5 的 原 码 。用 该 数 的 十 六 进

11、制 计 算 , 得 到 的 结 果 转 换 为 二 进 制 即 可 。例 如 : 求 -5 的 补 码算 法 1: 算 法 2:00000000 00H 00000101 05H11111011 0 FBH4、 找 1 法例 如 : 求 -15 的 补 码第 一 步 : +15: 00001111第 二 步 : 从 右 向 左 找 到 第 一 个 1, 然 后 把 左 边 的 所 有 位 取 反 。11110001再 举 一 个 例 子 验 证 下 : 求 -64 的 补 码+64: 0100000011000000四 、 几 点 补 充1、 已 知 一 个 数 的 补 码 , 求 原 码 的

12、 操 作 分 两 种 情 况 : ( 1) 如 果 补 码 的 符 号 位 为 “0”, 表 示 是 一 个 正 数 , 其 原 码 就 是 补 码 。 ( 2) 如 果 补 码 的 符 号 位 为 “1”, 表 示 是 一 个 负 数 , 那 么 求 给 定 的 这 个 补 码 的 补 码就 是 要 求 的 原 码 。【 例 3】 已 知 一 个 补 码 为 11111001, 则 原 码 是 10000111( -7) 。 因 为 符 号 位 为 “1”, 表 示 是 一 个 负 数 , 所 以 该 位 不 变 , 仍 为 “1”。其 余 七 位 1111001 取 反 后 为 0000110;再 加 1, 所 以 是 10000111。2、 数 值 范 围8 位 二 进 制 原 码 所 表 示 数 的 范 围 是 -127+127;8 位 二 进 制 反 码 所 表 示 数 的 范 围 是 -127+127;8 位 二 进 制 补 码 所 表 示 数 的 范 围 是 -128+127;希 望 能 对 计 算 机 初 学 者 和 编 程 爱 好 者 有 所 帮 助 。参 考 文 献【 1】 曲 俊 华 、 林 碧 英 . 计 算 机 基 础 与 程 序 设 计 .中 国 电 力 出 版 社 .2000.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号