当前位置: 首页 > news >正文

【计算机专业漫谈】【计算机系统基础学习笔记】W2-2-2 模运算系统和补码表示

利用空档期时间学习一下计算机系统基础,以前对这些知识只停留在应试层面,今天终于能详细理解一下了。参考课程为南京大学袁春风老师的计算机系统基础MOOC,参考书籍也是袁老师的教材,这是我的听课+自查资料整理后的笔记

补码表示法

补码表示可以实现加减运算的统一,即用加法来实现减法运算。在计算机中,补码用来表示带符号整数。补码表示法也称“2-补码”( two’s complement)表示法,由符号位后跟上真值的模2"补码构成,因此,在介绍补码概念之前,先讲一下有关模运算的概念。

模运算(modular运算)

在一个模运算系统中,一个数与它除以“模”后的余数等价。在模运算系统中,若 A , B , M A,B,M A,B,M满足下列关系: A = B + K × M ( K 为整数) A=B+K\times M(K为整数) A=B+K×M(K为整数),则记为 A ≡ B ( m o d M ) A\equiv B(modM) AB(modM),即 A , B A,B A,B各除以 M M M后的余数相同,故称 B B B A A A为模 M M M同余。现实世界中的模运算系统比如:时钟是一种模12系统

假定钟表时针指向10点,要将它拨向6点, 则有两种拨法:

  • 倒拨4格: 10 − 4 = 6 10- 4 = 6 104=6
  • 顺拨8格: 10 + 8 = 18 ≡ 6 ( m o d 12 ) 10+8 = 18 ≡ 6(mod 12) 10+8=186(mod12)

模12系统中: 10 − 4 ≡ 10 + 8 ( m o d 12 ) 10- 4 ≡ 10+8(mod 12) 10410+8(mod12). 则,称8是- 4对模12的补码 (即:- 4的模12补码等于8)。同样有 -3 ≡ 9 (mod 12) , , -5 ≡ 7 (mod 12)$等
【结论1】一个负数的补码等于模减该负数的绝对值。比如-5的补码,模 12 − ∣ − 5 ∣ = 7 12-|-5|=7 125∣=7,所以-5的补码是7
【结论2】对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替,比如模12系统中, 10 − 4 = 10 + ( − 4 ) 的补码 10-4 = 10 +(-4)的补码 104=10+(4)的补码
12 − ∣ − 4 ∣ = 8 12-|-4|=8 124∣=8,所以-4的补码是8
10 − 4 ≡ 10 + 8 10-4 ≡ 10 + 8 10410+8

补码(2’s complement)的表示

现实世界的模运算系统举例
【例】“钟表”模运算系统,假定时针只能顺拨,从10点倒拨4格后是几点?
【解】 10 − 4 = 10 + ( 12 − 4 ) = 10 + 8 = 6 ( m o d 12 ) 10- 4 = 10+(12- 4) = 10+8 = 6(mod 12) 104=10+(124)=10+8=6(mod12)

【例】“4位十进制数” 模运算系统,假定算盘只有四档,且只能做加法,则在算盘上计算9828-1928等于多少?
【解】由结论可知:

【结论2】对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替

模为 1 0 4 10^{4} 104,则 9828 − 1928 = 9828 + ( 1 0 4 − 1928 ) = 9828 + 9072 = < 1 > 7900 = 7900 ( m o d 1 0 4 ) 9828-1928=9828+(10^{4}-1928)=9828+9072=<1>7900=7900(mod 10^{4}) 98281928=9828+(1041928)=9828+9072=<1>7900=7900(mod104),取模即只留余数,高位<1>被丢弃!相当于只有低4位留在算盘上。

关于-1928的补码,可以不用这么复杂得求出,按位取反改为加法(正数)末位加1即可,在十进制数中(0,1,2,3,4,5,6,7,8,9),0的反数是9,1的反数是8,2的反数是7,3的反数是6,4的反数是5,按中心对称互相对应,由上述规则,-1928的按位取反改为加法(正数)末位加1的结果是8071+1=8072

计算机中的运算器是模运算系统

计算机是8位二进制加法器模运算系统
【例】计算 0111 1111 - 0100 0000
【解】0111 1111B - 0100 0000B相当于0111 1111B + 0100 0000B的补码
0100 0000B按位取反加1为1011 1111B + 0000 0001B=1100 0000B
则0111 1111B - 0100 0000B = 0111 1111B - 1100 0000B= <1> 0011 1111B,<1>被丢弃,只留余数,即结果为0011 1111B
【结论】一个负数的补码等于将对应正数补码各位取反、末位加一。

运算器适合用补码表示和运算

运算器只有有限位,假设为n位,则运算结果只能保留低n位,故可看成是个只有n档的二进制算盘,因此,其模为 2 n 2^{n} 2n
1

补码的定义

根据上述同余概念和数的互补关系,可引出补码的表示:正数的补码符号为0,数值部分是它本身;负数的补码等于模与该负数绝对值之差。因此,数 X T X_{T} XT的补码可用如下公式表示:
(1)当 X T X_{T} XT为正数时, [ X T ] 补 = X T = M + X T ( m o d M ) [X_{T}]_{补}=X_{T}=M+X_{T}(mod\space M) [XT]=XT=M+XT(mod M)
(2)当 X T X_{T} XT为负数时, [ X T ] 补 = M − ∣ X T ∣ = M + X T ( m o d M ) [X_{T}]_{补}=M-|X_{T}|=M+X_{T}(mod\space M) [XT]=MXT=M+XT(mod M)
综合(1)和(2),得到以下结论:对于任意一个数 X T X_{T} XT [ X T ] 补 = M + X T ( m o d M ) [X_{T}]_{补}=M+X_{T}(mod\space M) [XT]=M+XT(mod M)
对于具有一位符号位和 n − 1 n-1 n1位数值位的 n n n位二进制正数的补码来说,其补码定义如下:
[ X T ] 补 = 2 n + X T ( − 2 n − 1 ≤ X T < 2 n − 1 , m o d 2 n ) [X_{T}]_{补}=2^{n}+X_{T}(-2^{n-1}\le X_{T}<2^{n-1}, mod\space 2^{n}) [XT]=2n+XT(2n1XT<2n1,mod 2n)
【注】用大白话解释上面的理论就是,对于二进制数,正数的补码就是原码,负数的补码是按位取反后再加1.

求特殊数的补码

2

http://www.lryc.cn/news/66143.html

相关文章:

  • vue概述
  • SpringCloud-OpenFeign案例实战
  • ACM - 数学 - 提高(还没学多少)
  • JavaScript class和继承的原理
  • Playwright-python 自动化测试【Anaconda】环境配置
  • 攻防世界-web-simple js
  • 【SpringCloud】初始微服务
  • 均摊时间复杂度
  • 夏驰和徐策的解决数学问题思路——反证法
  • 面向开发人员的 ChatGPT 提示词教程 - ChatGPT Prompt Engineering for Developers
  • 虹科方案|使用 HK-TRUENAS支持媒体和娱乐工作流程-1
  • DDR5内存彻底白菜价,国外大厂却整出了比着火更离谱的骚操作
  • Linux网络——Shell编程之函数
  • GQCNN+PointNetGPD思路和问题--chatGPT
  • Mysql索引(2):索引结构
  • Spring框架介绍和应用实践
  • IO 流学习总结
  • PowerToys——免费、强大、高效的微软官方效率提升工具集,办公学习宝藏软件
  • 【C++】 类基础汇总(类封装,构造、析构函数...)
  • BM61-矩阵最长递增路径
  • selenium——unittest框架
  • matlab频谱分析详解
  • 用layui写用户登录页面遇到的问题
  • NMOS双向转换电路实测以及上升沿尖峰处理
  • 【数据结构】选择排序(详细)
  • 什么是企业内容管理?
  • 机器学习:分类、回归、决策树
  • java常见的异常,下一篇写如何正确处理异常
  • C#开发的OpenRA游戏之网络协议打包和解包
  • K8S通过Ansible安装集群