10’s Complement Representation
主要内容:
1. 10’s 补码表示:
• 10’s 补码表示法需要指定表示的数字位数(用 n 表示)。
• 表示的数字取决于 n 的位数,这会影响具体数值的解释。
2. 举例:
• 如果采用 3 位补码,数字 ‘567’ 代表 -433 。
• 原理:在 3 位补码中,范围是从 -10^3 / 2 到 10^3 / 2 - 1 ,即 -500 到 499 。数字超过正值范围就表示负值。
• 如果采用 4 位补码,数字 ‘0567’ 代表 567 。
• 因为此时正值范围是从 0 到 10^4 - 1 。
Addition
1. 使用 10’s 补码的加法操作:
• 对于 n 位数字,在补码表示中进行加法的规则是:
• 按 模 10^n 进行加法。
• 任何超过 n 位的进位都会被“丢弃”(舍弃最高位的进位)。
2. 核心规则:
• 模运算: 结果限制在指定的范围内(例如对于 3 位补码,模 1000 )。
• 使用标准加法规则,只需在最终结果中忽略多余的进位。
补充解释:
• 模运算的意义: 模运算确保结果始终在有效范围内。例如,在 3 位数运算中,进位舍弃后,结果仍然是 3 位数。
• 简化计算: 通过模运算和进位舍弃,复杂的减法和负数处理都能简化为加法。
Subtraction
1. 减法原理:
• 减去 B 相当于加上 -B ,即:
A - B = A + (-B)
2. 如何计算 -B :
• -B 是 B 的 10’s 补码,即:
• 用 10^n - 1 减去 B 。
• 例如,若 B = 250 ,其补码 -B = 750 。
Overflow testing
• Example.
– Codes: ‘347’ + ‘230’ = ‘577’.
– Values: 347 + 230 = - 423.
超出了 3 位补码的表示范围(-500 到 499)。
溢出检测的规则
• 如果两个加数的符号相同,但结果的符号不同,就发生了溢出。
Positive and Negative
1. 10’s 补码范围分布:
• 在 10’s 补码系统中,正数和负数的表示范围是不均匀(unevenly)的。
• 这是因为 10’s 补码需要分配一个额外的数字给负的最小值(负数范围多一个值)。
2. 例子:
• 在 4 位补码系统中,可以表示的整数范围是:
-5000 -4999
• 负数范围为 -5000 到 -1,共 5000 个数。
• 正数范围为 0 到 4999,共 5000 个数。
• 这种不均匀分布是补码编码的固有特性。
Two’s Complement in 8 Bits
1. 二进制中的 2’s 补码:
• 对于 8 位二进制数(n=8),2’s 补码的表示类似于 10’s 补码,只是底数从 10 换成了 2。
• 范围:
• 从 - 2^7 = -128 到 2^7 - 1 = 127 。
2. 表示方法:
• 二进制编码如下:
• 从 10000000 表示最小的负数(-128)。
• 到 01111111 表示最大的正数(127)。
• 0 的编码是 00000000。
符号规则
• 以 0 开头的数字:
• 表示正数,直接用自然值。
• 如:00000101 表示 5。
• 以 1 开头的数字:
• 表示负数,其数值为补码形式。
• 如:11111101 表示 -3。
求补码的方法
• 计算一个数字的 2’s 补码可以通过两种方法:
1. 模运算
从 2^n 减去数值。
2. 逐位取反加 1
• 取反:将所有位翻转(0 变 1,1 变 0)。
• 加 1:对取反后的值进行加 1 运算。
例子:
• 数字 11011101:
• 逐位取反得到 00100010。
• 加 1 得到 00100011,即 -35。
Addition
1. 加法规则:
• 在 2’s 补码中,加法通过模运算 2^n 实现。
• 超出最高位的进位会被舍弃。
2. 例子:
• 011011 表示 27。
• 101100 表示 -20(负数补码形式)。
• 加法:
• 011011 + 101100 = 1000111 (有进位)。
• 舍弃最高位,结果是 000111,即 7。
Subtraction and Overflow
1. 减法的实现:
• 在 2’s 补码系统中,减法与 10’s 补码类似:
A - B = A + (-B)
• 这意味着减法可以通过先求负数 -B 的补码,然后与 A 直接相加来完成。
2. 溢出的检测:
• 如果两个加数的符号相同,但结果的符号不同,则发生了溢出。
Numerical Types in Java
1. Java 中的整数类型:
• byte: 8 位整数,范围: -2^7 到 2^7 - 1 (即 -128 到 127)。
• short: 16 位整数,范围: -2^{15} 到 2^{15} - 1 (即 -32,768 到 32,767)。
• int: 32 位整数,范围: -2^{31} 到 2^{31} - 1 。
• long: 64 位整数,范围: -2^{63} 到 2^{63} - 1 。
2. 补码表示法:
• Java 使用 2’s 补码表示法 来处理有符号整数。
Q&A
1. Addition for n -digit numbers represented by 10’s complement is based on addition modulo 10^n ?”
• 答案:True。
n -位数的加法基于 模运算 10^n
2.How is Overflow Detected?
溢出检测规则:
• 当两个数的符号相同,而结果的符号与加数符号不同,则发生溢出。
3. Can Overflow Result from Subtractions?
与加法类似:若两个操作数的符号相反,而结果符号与被减数 A 不同,则发生溢出
4. An int type under Java encodes integers under this range: -2³² — 2³² - 1?
实际表示范围是从 -2³¹ 到 2³¹ - 1