c语言补码.

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(先算出[x]补=00000111, [-y]补=11111100 ,
x―y=x+(-y) ) 补码运算: 00000111 + 11111100 1 00000011 自然丢失 手工验算:
[x]补 [-y]补
[x-y]补
-
0000111 0000100
x y
0000011
x-y
补码 •几点补充说明(1)
三、有符号数的表示

原码 反码 补码
1、原码

真值用二进制表示后,数的数值部分不 变,在符号位上用“0”和“1”分别表示数 的符号“+”和“-”。


X的原码一般表示为 [X]原
如:
x [x]原
+1001001
01001001
-1100100
11100100
2、反码

正数的反码:与原码相同; 负数的反码:符号位为“1”,数值位按 位取反。

微机内部,带符号数均用补码表示。 采用补码进行运算后,结果也是补码, 欲得真值,需作转换。
0开头:将0换成“+”号,其余数位不变。
转换方法
1开头:1换成“-”号,其余
方法1: 减 1求反
方法2: 求反加1
补码 •几点补充说明(2)

如果已知x的补码[x]补,则求[-x]补的方 法是: 对[x]补连同符号位一起求反加1 例:
出现问题

错误的结果:
11001011 10010001 01011100
-0110101 + -1101111 +1011100
-53 + -111 +92 -164
思考:为什么出现了错误?
补码 • 溢出

刚才出现的问题叫做“溢出”; 溢出的原因:运算结果超出了可表示的有 符号数的范围。 溢出只会出现在两个同号数相加或两个异 号数相减的情况下。
思考:如何判别溢出与正常进位?

补码 • 溢出的判别(1)

方法一:转换为真值,判断是否超出数值 表示范围。 方法二:根据最高位的进、借位情况进行 判断。


溢出:“有进无出”或“无进有出” 正常:“有进有出”或“无进无出”
二、无符号数与有符号数

无符号数:

全部二进制均代表数值,没有符号位。 用最高位作为符号位,“0”代表“+”,“1”代 表“-”;其余数位用作数值位,代表数值。
如: +35 化为有符号机器数
转换为 二进制 +100011B 化成有 符号数 0100011
8位 16位

有符号数:


+35
(00100011) (0000000000100011)
补码 •补码的求法(1)
正数:与原码相同; 负数:“求反加一” 例: x=+1001100,则[x]补=01001100=[x]原 x=-1001100,则[x]补=10110100 x=-1001100时, [x]补=28-1001100 =256 -1001100 11111111 =255 -1001100+1 01001100 =11111111 求反 10110011 1001100+1 1 加1 = 10110100 10110100
补码 • 引入的思路(1)


由钟表拨表针的方法得到启示; 例如:把表上的8点钟改为6点钟
方法一: 反时针 拨2格
方法二: 顺时针 拨10格
补码 • 引入的思路(2)
方法一: 反时针 拨2格 方法二: 顺时针 拨10格


拨针方法小结: 8- 2=6 8 + 10 = 6 思考:为什么会出现这种现象?计算机中是否 也有这种现象? (表盘是圆的,可循环计时。)

X的反码一般表示为 [X]反
如:
x [x]反
+1001001
01001001
-1100100
10011011
3、补码

引入补码的目的 引入的思路 补码的求法 补码的作用与效果 几点说明 溢出
补码 • 引入补码的目的

将加、减运算简化为单纯的相加运算, 以便于在计算机中实现各种运算。

补码 •补码的求法(2)

对于负数的补码求法,还有另一个更快速的办 法: 符号位为1,真值中最后一个1以前的各 位按位求反,而最后一个1及其后的0保持不变。
11111111 01001100
10110011 1 10110100
符号位为1
按位求反
最后一个1及 其后的0不变
补码 •补码的求法(3)

课堂练习
1、求出下列各数的补码(8位)
(1) – 67
(2) +1011001
10111101
01011001
(3) – 45
11010011
补码 •补码的作用与效果
用补码表示计算机中的数后,加减运算均可统 一为加法。 例: 设 x=+0000111 , y=+0000100, 计算式子:x―y
原码、反码与补码
一、机器数与真值(1)

真值:


实际的数值(包括正负号)叫做真值。
如:
+35
一、机器数与真值(2)

机器数:


机器数:数在计算机中的表示;
在计算机中,数只能用二进制表示,符号也
用二进制数位表示;

是存放在寄存器或储存单元中的。
例如:
10000111,11001001,01100011
计算机的模与字长有关。8位机的模是 28=256
n位 …… 模=12 模=2n

补码 • 引入的思路(5)



观察钟表拨针的两种方法: 8- 2=6 8 + 10 = 6 我们可以看出,减去一个数 a 相当于加上 (模-a)一样,而在计算机中也有相同情况。 在8位字长的计算机中,减去一个数a相当于加 上(28-a)一样。 我们称(28-a)为a的补数,其二进制表示形 式称为补码。
已知 [+35]的补码是00100011,

[-35]补=11011101
补码 •几点补充说明(3)
Leabharlann Baidu
用补码运算时符号位也参与运算,有符 号数与无符号数的运算是兼容的。
例:
看成无符号数 二进制数相加 看成补码
+
134 26
160
+
10000110 00011010
10100000
+
-122 26
-96
补码 • 引入的思路(3)

计算机储存一个数也有与钟表相同的特 点:
循环计数

因此对于计算机,要计算像 8- 2 这样的减法式子,也可以化为加法形式来 进行。
思考: 在计算机中, 8-2是否也可以化为8+10? 如果不行,那么应化为什么样的式子?
补码 • 引入的思路(4)

不同之处:


表计时的最大数是12 计算机计数的最大数不是12 我们把这个数称为 模
相关文档
最新文档