CS61C 2020计算机组成原理Lecture01-数字表示,溢出

news2024/9/22 14:51:09

1. 原码

原码就是符号化的数值,其编码规则简单直观:正数符号位用0表示,负数符号位用1表示,数值位保持不变。
在这里插入图片描述

x=+0.1101,则[x]=0.1101;x=+1101,则[x]=01101

x= -0.1111,则[x]=1.1111; x= -1111,则[x]=11111

但原码存在两个机器0,这会给数据运算带来麻烦。另外原码的加减法运算复杂,符号位不能直接参与运算。加法运算需要“同号求和,异号求差”,减法运算需要“一号求和,同好求差”,求差时还需要先比较大小,然后用大数减去小数,最后结果的符号选择也相对复杂。显然,利用原码作为机器数在实现加减法运算方面是不方便的,原码在计算机中目前仅仅用于表示浮点数的尾码

2. 反码

反码又称1的补码,其符号位和原码相同,真值为正数时,反码和原码相同;真值为负数时,反码数值位为真值数值位取反。现代计算机中并没有采用反码进行数据表示和运算,这是因为人们找到了更好的编码——补码。

在这里插入图片描述

x=+0.1101,则[x]=0.1101;x=+1101,则[x]=01101 

x= -0.1111,则[x]=1.0000;x= -1111,则[x]=10000

3. 补码

在这里插入图片描述

在计算机中,一个如果n bit 为,且需要表示正负数,那么 表示的范围是从 -2^n-1 ~ 2^n-1 -1,0就是用全0表示。负数能比正数多表达一个,是因为在计算机中,负整数是用补码表示的。所以,非常适合采用补码进行表示和运算。例如:

  • 对于正整数:

正整数的原码和补码相同。

  • 对于负整数:

当原码为全1的情况如下:
1111 1111 | 1111 1111 | 1111 1111 | 1111 1111(-2147483647原码)
1000 0000 | 0000 0000 | 0000 0000| 0000 0000 (-2147483647反码)
1000 0000 | 0000 0000 | 0000 0000| 0000 0001 (-2147483647补码)

由于计算机中是用补码进行计算的,所以最小负整数-2147483648补码可以表示为
1000 0000 | 0000 0000 | 0000 0000| 0000 0000
那么其原码和反码理论上是存在的,加上第一位符号位,但是32位是无法存储的。但计算机中由于直接用补码进行计算,所以可以存储其补码


x=+0.0101,则[x]=0.0101;

x= -0.0101,则[x]=1.1011;

x= -0.0000,则[x]=0.0000;

x= -1.0000,则[x]=1.0000
  • 对于 零:
    此外还有两种情况没有包含进去:
    +0:
    0000 0000 | 0000 0000 | 0000 0000| 0000 0000 (原码、反码和补码匀为同一个)
    即整数为0这种情况,在二进制中0的反码可以表示为-0和+0这两种情况
    -0:
    1000 0000 | 0000 0000 | 0000 0000| 0000 0000 (原码)
    即-0,反码表示为:
    1111 1111 | 1111 1111 | 1111 1111 | 1111 1111
    -0补码为反码加1,则补码为:
    1 0000 0000 | 0000 0000 | 0000 0000| 0000 0000 第一位1舍去即:
    0000 0000 | 0000 0000 | 0000 0000| 0000 0000,所以+0和-0的补码是一样的,由此可见计算机为什么会使用补码进行计算

在这里插入图片描述

4. 移码

移码只用于定点整数的表示,通常用于表示浮点数的阶码。其编码方式是直接将真值x加一个常数偏移量。

在这里插入图片描述

移码的符号位中0表示负数,1表示正数;

5. 溢出

程序验证

最后来考虑如果取int的值超过这个范围的情况,以下为程序来验证:

#include<iostream>
using namespace std;
int main()
{
	int i=2147483647;
	int j=2147483648;
	int k=2147483649;
	cout<<i<<endl;
	cout<<j<<endl;
	cout<<k<<endl;
	return 0;
}

从上图输出结果来看,可以看到一个很有趣的结果,当正整数超出2147483647范围后出现了循环取值的现象,即2147483648溢出后回到了最小负整数-2147483648,2147483649溢出后变成了-2147483648+1=-2147483647,依次类推。
所以2147483649可以表示为-2147483648+1,1000 0000 | 0000 0000 | 0000 0000 | 0000 0000 + 0000 0000 | 0000 0000 | 0000 0000 | 0000 0001 = 1000 0000 | 0000 0000 | 0000 0000 | 0000 0001
所以int整型溢出后可以用这样的方式类推。

在这里插入图片描述

6. 快速计算某个补码的数值2个方法 1)把符号位也用于计算,2)翻转后加上负号如下图:

在这里插入图片描述
再举一个例子,1010是一个补码,计算-8+2 = -6,就是-6的补码。

或者 翻转为0101,等于6,再加上负号,为-6.

在这里插入图片描述

7. 快速判断两个补码相加可能会:

如果两个正数相加或负数相加,则可能会溢出,如果两个数的符号为一个为0,一个为1,则不会溢出。因此,关键是看符号位。

8. practice:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Mesh 组网和 AC+AP 组网的优缺点》

Mesh 组网和 ACAP 组网的优缺点。 Mesh 组网的优点&#xff1a; 1. 部署灵活&#xff1a;节点之间可以通过无线方式连接&#xff0c;新增节点比较方便&#xff0c;无需事先规划布线。 2. 自我修复和优化&#xff1a;如果某个节点出现故障&#xff0c;网络可以自动重新路由数据&…

MyBatis 数据处理:主键获取、批量删除与动态表名

目录 MyBatis 数据处理&#xff1a;主键获取、批量删除与动态表名 1.主键获取 1&#xff09;mapper接口 2&#xff09;mapper.xml 3&#xff09;测试代码 4&#xff09;测试结果 2.批量删除 1&#xff09;mapper接口 1-使用手动拼接字符串数组的方法 2-使用mybatis中的foreach标…

【数据结构与算法 | 每日一题 | 力扣篇】力扣1184

1. 力扣1184&#xff1a;公交站间的距离 1.1 题目&#xff1a; 环形公交路线上有 n 个站&#xff0c;按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离&#xff0c;distance[i] 表示编号为 i 的车站和编号为 (i 1) % n 的车站之间的距离。 环线上的公交车…

微信支付开发-程序开发

一、操作流程图 二、后端代码实现 1、题库实现 a、列表、所有、详情、保存、启禁用、导入答题 b、获取奖品信息、保存奖品信息、 class Question extends Base {// 列表public function getList(){$param $this->request->param();$where [];if(!empty($param[title])…

spdlog二次封装

这里写自定义目录标题 封装的原因封装的思想初始化接口的封装对日志输出接口进行宏的封装 封装的原因 1.避免单例的锁冲突&#xff0c;因此直接创建全局的线程安全的日志器进行使用 2.因为日志输出没有文件名行号&#xff0c;因此使用宏进行二次封装输出日志的文件名和行号 3.…

【JavaScript】LeetCode:707设计链表

文章目录 题目内容题目分析(1) 获取第n个节点的值(2) 头部插入节点(3) 尾部插入节点(4) 第n个节点前插入节点(5) 删除第n个节点 完整代码 题目内容 题目分析 添加哨兵节点dummy。在第n个节点前插入节点时&#xff0c;应该找到第n - 1个节点&#xff08;即前一个节点&#xff0…

国内人工智能产业发展现状及对策研究

一、引言 人工智能作为新时代科技革命和产业变革的核心力量&#xff0c;正深刻改变着全球经济格局。我国政府高度重视人工智能产业发展&#xff0c;将其列为国家战略性新兴产业。在此背景下&#xff0c;本文旨在分析我国人工智能产业发展现状&#xff0c;探讨面临的挑战&#x…

java基础面试题总结

java基础面试题总结 目录 前言 1. JVM vs JDK vs JRE的了解 2. 谈谈你对编程、编译、运行的理解 3. 什么是字节码?采用字节码的好处是什么? 5. java中的注解有几种&#xff0c;分别是什么&#xff1f; 6. 字符型常量和字符串常量 7.标识符和关键字的认识 8. 泛型&#xff…

初识Verilog HDL其二

文章目录 运算符往期回顾 运算符 往期回顾 初识Verilog HDL其一

储能运维管理云平台解决方案EMS能量管理系统

在储能行业蓬勃发展的今天&#xff0c;储能运维管理的重要性日益凸显。而储能运维管理云平台的出现&#xff0c;正为储能系统的稳定运行和高效管理注入了新的活力。 一、储能运维管理面临的挑战 传统的储能运维管理方式往往依赖人工巡检和现场操作&#xff0c;存在诸多问题。比…

虚幻引擎 | 实时语音转口型 Multilingual lipsync

实时语音转口型&#xff1a;EPIC的metahuman sdk&#xff0c;NVIDIA的audio2face&#xff0c;都好。本文使用metahuman sdk 需要工具&#xff1a;Metahuman SDK网页账号&#xff0c;获取两日免费tokens https://space.metahumansdk.io/#/unauthorized ———————————…

6,csdn 语法

1 &#xff0c;标题 &#xff1a; 1.1 &#xff0c;语法 &#xff1a; 1 &#xff0c;语法 &#xff1a;几级标题&#xff0c;就几个井号   例如&#xff1a;### 1.1&#xff0c;语法 2 &#xff0c;小技巧 &#xff1a; 2.1&#xff0c;一条横线 &#xff1a; 1 &#x…

Table列表复现框实现【勾选-搜索-再勾选】

Table列表复现框实现【勾选-搜索-再勾选】 概要整体架构流程代码实现技术细节注意参考文献 概要 最近在开发时遇到一个问题&#xff0c;在进行表单渲染时&#xff0c;正常选中没有问题&#xff0c;单如果需要搜索选中时&#xff0c;一个是已选中的不会回填&#xff0c;二是在搜…

【运营攻略】怎样进行游戏产品的定位

关于游戏商业化设计的一些思考 - 游戏干饭之家 游戏运营进阶&#xff1a;数据分析驱动游戏版本调优 - 游戏干饭之家 在深入挖掘某款游戏数据时&#xff0c;发现了一个有趣的现象&#xff1a;70%的玩家好友数量在1-5个之间&#xff0c;11%的玩家好友数在6-10个&#xff0c;而平…

Fiddler下载安装及汉化

直接上干货 1.下载地址&#xff1a; 通过百度网盘分享的文件&#xff1a;fiddler汉化&#xff0c;FiddlerSetup抓包.exe等2个文件 链接&#xff1a;https://pan.baidu.com/s/12JBZO8z0mDHlHM1DCL365g 提取码&#xff1a;1111 2.fiddler安装&#xff1a; 注意安装位置 3.汉化&…

基于协同过滤+python+django+vue+的音乐推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…

计算机毕业设计 在线新闻聚合平台的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

象过河手机进销存,外出办公更方便,随时了解经营情况

你还在为外出时无法即时查看库存、处理订单而烦恼吗&#xff1f;电脑端进销存虽强&#xff0c;但一离开办公桌就仿佛与店铺“失联”&#xff0c;那些紧急的调货请求、客户咨询&#xff0c;都让人手忙脚乱&#xff01; 这里强烈推荐你试试【象过河手机进销存】&#xff0c;它就像…

计算机网络入门基础

1. 基础概念 我们在聊网络的时候&#xff0c;就像是我们在日常生活中寄信一样。我们可以把网络想象成一个巨大的邮局系统&#xff0c;负责把信息从一个地方传送到另一个地方。 a. 什么是协议栈&#xff1f; 协议栈就像是寄信过程中的多个步骤。我们可以把它想象成寄信的时候…

Python3 SMTP发送邮件

SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则&#xff0c;由它来控制信件的中转方式。 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。 Python创建 SM…