1.3 有符号二进制数的表示方法及溢出问题(课件)-《计算机原理》(电工版第五版) 同步精品课堂
2025-10-30
|
25页
|
138人阅读
|
1人下载
精品
内容正文:
计算机原理
-第4课时-
电工版第五版
有符号二进制数的表示方法及溢出问题
教学目标
了解计算机内有符号二进制数的表示方法
掌握原码、反码和补码的概念、表示及相互转换
理解有符号数运算时溢出问题的产生及判断方法
教学重难点
原码、反码和补码的表示方法
原码、反码和补码之间的转换方法
有符号数运算溢出的判断
让我们一起开启单片机的学习之旅。
导入新课
在计算机中,数分为无符号数和有符号数。
有符号数如何在计算机中表示呢?
在运算过程中又会出现什么问题呢?
让我们一起学习有符号二进制数的
表示方法及溢出问题。
新知讲授
概述
计算机内的数分为无符号数和有符号数,有符号数需将正、负号数字化,用一位二进制数(符号位)表示,“0” 表示正,“1” 表示负,有原码、反码和补码三种表示形式。
无符号数和有符号数
无符号数:仅表示非负整数(如 0、1、2...),所有二进制位均为数值位(如 8 位无符号数范围 0~255),适用于计数、地址等场景
有符号数:需表示正、负整数(如 - 3、+5...),需将 “正负号” 数字化,通常规定最高位为符号位(占 1 位),剩余位为数值位:符号位 “0” 表示正数,“1” 表示负数(如 8 位有符号数,第 7 位为符号位,第 0~6 位为数值位)
有符号二进制数的表示方法
新知讲授
原码——有符号数最基础的表示方法
规则为:符号位(最高位)+ 数值的绝对值二进制,其中符号位 “0” 表示正数,“1” 表示负数,数值位保留该数绝对值的二进制形式(若不足字长,数值位高位补 0)。
示例解析(以 8 位字长为例)
正数示例:+7 的绝对值为 7,7 的 8 位二进制为 00000111,符号位为 0,故 [+7] 原 = 0 0000111(可简写为 00000111B,符号位与数值位合并)
负数示例:-7 的绝对值为 7(二进制 00000111),符号位为 1,故 [-7] 原 = 1 0000111(简写为 10000111B)
有符号二进制数的表示方法
新知讲授
反码——为解决原码减法运算复杂而设计的过渡形式
规则分两种情况:
正数的反码:与原码完全相同(符号位为 0,数值位为绝对值二进制)
负数的反码:符号位保持为 1(表示负数),数值位对原码的数值位 “按位取反”
示例解析(以 8 位字长为例)
正数示例:+7 的原码为 00000111B,根据规则,正数反码与原码一致,故 [+7] 反 = 00000111B(十六进制 07H)
负数示例:-7 的原码为 10000111B,符号位保持 1,数值位 0000111 取反为 1111000,故 [-7] 反 = 11111000B(十六进制 F8H)
有符号二进制数的表示方法
新知讲授
补码 - 模的概念
“模”(Modulus)是计量系统的 “计数范围” 或 “循环周期”,类似于日常生活中的 “时钟”(模为 12,时针从 12 到 11 循环)、“月份”(模为 12)。
在计算机中,模由 “字长” 决定,即 n 位二进制数的模为 2ⁿ(所有 n 位二进制数的总数):
8 位二进制数:可表示 0~255 共 256 个数值,故模为 2⁸=256
16 位二进制数:可表示 0~65535 共 65536 个数值,故模为 2¹⁶=65536
有符号二进制数的表示方法
新知讲授
补码——计算机中存储和运算有符号数的标准形式
正数的补码:与原码、反码完全一致,即符号位为 0,数值位为该数绝对值的二进制形式(因正数绝对值小于模 2ⁿ,补码 = 自身)
负数的补码:① 基于反码:负数的补码 = 负数的反码 + 1(最常用的计算方法);② 基于模运算:负数的补码 = 2ⁿ - 该负数的绝对值(本质定义)
示例解析(以 8 位字长为例,模 = 256)
正数示例:+7 的绝对值为 7(二进制 00000111),符号位为 0,故 [+7] 补 = 00000111B(十六进制 07H),与原码、反码一致
负数示例(方法①:反码 + 1):-7 的原码为 10000111B,反码为 11111000B,反码加 1 得 11111001B,故 [-7] 补 = 11111001B(十六进制 F9H)
有符号二进制数的表示方法
新知讲授
已知原码求补码
示例:已知某数 X 的原码为 10110100B,求 X 的补码。
1 0 1 1 0 100 (原码)
1 1 0 0 1 011 (符号位不变,数值位取反)
+ 1
1 1 0 0 1 1 0 0 (补码)
所以 [X] 补 = 11001100B
原码、反码和补码之间的转换
步骤:符号位不变,数值部分按位求反,再在末位加 1。
新知讲授
已知补码求原码
示例:已知某数 X 的补码为 11101110B,求其原码。
1 1 1 0 1 1 1 0 (补码)
1 0 0 1 0 0 0 1 (符号位不变,数值位取反)
+ 1
1 0 0 1 0 0 1 0 (原码)
所以 [X] 原 = 10010010B
原码、反码和补码之间的转换
步骤:符号位不变,数值部分按位求反后,再在末位加 1。
新知讲授
求补
将 [X] 补的所有位(包括符号位)一起逐位取反,然后在末位加 1,可得 - X 的补码 [-X] 补。
[ + 9 7 ] 补 = 0 1 1 0 0 0 0 1 ([+97]补)
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
1 0 0 1 1 1 1 0 (逐位取反)
+ 1
1 0 0 1 1 1 1 1 ([-97]补)
原码、反码和补码之间的转换
示例:求 + 97、 - 97 的补码。
[+97] 补 = 01100001 求 [-97] 补:
新知讲授
已知补码求对应的十进制数
示例:已知某数 X 的补码为 10101011B,求其所对应的十进制数。
1 0 1 0 1 0 1 1 (补码)
0 1 0 1 0 1 0 0 (按位取反)
+ 1
0 1 0 1 0 1 0 1B = 85 (绝对值)所求十进制数为 - 85。
原码、反码和补码之间的转换
方法 1:“求反加 1” 法
将补码按位取反,再在最低位加 1,得到绝对值,前面加负号。
方法 2:“零减补码” 法
用数零减补码,不理会最高位借位,所得结果为绝对值,结果相同。
新知讲授
8 位二进制代码表示对照表——部分
原码、反码和补码之间的转换
二进制代码表示 无符号十进制数 原码 反码 补码
00000000 0 +0 +0 +0
00000001 1 +1 +1 +1
00000010 2 +2 +2 +2
01111100 124 +124 +124 +124
01111101 125 +125 +125 +125
01111110 126 +126 +126 +126
01111111 127 +127 +127 +127
10000000 128 -0 -127 -128
10000001 129 -1 -126 -127
10000010 130 -2 -125 -126
... ... ... ... ...
11111100 252 -124 -3 -4
11111101 253 -125 -2 -3
11111110 254 -126 -1 -2
11111111 255 -127 -0 -1
新知讲授
溢出概述
溢出(Overflow)是指有符号数在运算过程中,结果超出当前字长补码所能表示的范围,导致运算结果与实际数学结果不一致的现象。
有符号数与无符号数的溢出差异
有符号数运算时的溢出问题
新知讲授
溢出范围
n 位有符号数(补码)的溢出范围判定规则为:
若运算结果 > 2ⁿ⁻¹ - 1 → 正溢出(正数超出上限);
若运算结果 < -2ⁿ⁻¹ → 负溢出(负数超出下限);
有符号数运算时的溢出问题
常见字长的溢出范围实例(n=8)
补码表示范围:-2⁷ ~ 2⁷ - 1 = -128 ~ +127;
正溢出场景:运算结果 > +127(如 + 120 + +8=+128,+128>+127,正溢出);
负溢出场景:运算结果 <-128(如 - 120 + (-10)=-130,-130<-128,负溢出)。
新知讲授
加法溢出判断
对于加运算,次高位(数值部分最高位)形成进位加入最高位,而最高位(符号位)相加(包括次高位的进位)无进位输出,或次高位无进位加入最高位,但最高位有进位输出时,发生溢出。
示例:(+72) + (+98)
有符号数运算时的溢出问题
进位位:1 0 0 0 0 0 0 0
操作数1:0 1 0 0 1 0 0 0 B (+72补码)
+ 操作数2:0 1 1 0 0 0 1 0 B (+98补码)
---------------------------
结果补码:1 0 1 0 1 0 1 0 B (十进制-42)
次高位(第 6 位):1(操作数 1)+1(操作数 2)=10,产生进位(次高位有进位);
最高位(第 7 位):0(操作数 1)+0(操作数 2)+1(次高位进位)=1,无进位输出(最高位无进位);
新知讲授
减法溢出判断
对于减法运算,当次高位不需从最高位借位,但最高位需借位(正数减负数,差超出范围),或次高位需从最高位借位,但最高位不需借位(负数减正数,差超出范围)时,出现溢出。
示例:(+72) - (-98)
有符号数运算时的溢出问题
被减数:0 1 0 0 1 0 0 0 B (+72)
- 减数: 1 0 0 1 1 1 1 0 B (-98)
---------------------------
借位情况:↓ 1 1 1 0 1 1 0 (高位向低位借位)
结果: 1 0 1 0 1 0 1 0 B (十进制-42)
次高位(第 6 位):被减数为 1,减数为 0,不需向最高位借位(次高位无借位);
最高位(第 7 位):被减数为 0,减数为 1,需向更高位借位(实际无更高位,视为借位成功,最高位有借位);
随堂检测1
已知某数的原码为 11001010B,求其补码。
答案:10110110B
两个 8 位有符号数 10101010B 和 11001000B 相加,判断是否溢出。
答案:溢出
练一练
随堂检测2
求 - 123 的补码(8 位)。
答案:10000101B
已知某数补码为 11110000B,求对应的十进制数。
答案: - 16
练一练
随堂检测3
若字长为 16 位,有符号数的表示范围是多少?
答案:根据公式 - 2ⁿ⁻¹ ≤ X ≤ 2ⁿ⁻¹ - 1 计算,得出:- 32768~+32767
计算 10101010B - 01010100B,判断是否溢出。
答案:未溢出
练一练
随堂检测4
已知某数反码为 10110110B,求其原码。
答案:11001001B
两个有符号数相加,若次高位无进位,最高位有进位,是否溢出?
答案:是
练一练
师生互动
1
在实际编程中,如何避免有符号数运算的溢出问题?请分组讨论并列举一些可行的方法。
课题小结
1. 有符号二进制数的表示方法
有符号二进制数的表示方法及溢出问题
2. 原码、反码和补码之间的转换
已知原码求补码
已知补码求原码
求补
已知补码求对应的十进制数
8 位二进制代码表示对照表
原码
反码
补码
溢出范围
加法溢出判断
减法溢出判断
3. 有符号数运算时的溢出问题
谢谢观看
THANKS
Lavf58.46.101
$
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。