用 5 位二进制补码表示有符号数的最高和最低整数是多少?

2023-12-02

我了解二进制的工作原理,并且可以将二进制计算为十进制,但我对带符号的数字感到困惑。 我找到了一个计算器进行转换。但我不确定如何找到最大值和最小值,或者在未给出二进制数的情况下进行转换,并且 StackO 中的问题似乎是关于转换特定数字或不包括有符号数字到特定位。

具体问题是:

We have only 5 bits for representing signed numbers in two's complement:

What is the highest signed integer? 
Write its decimal value (including the sign only if negative).

What is the lowest signed integer? 
Write its decimal value (including the sign only if negative).

看来我必须更深入地了解二进制概念,我只有两个月的编程时间,我以为我了解二进制转换。


从逻辑的角度来说:

签名表示的界限

有 5 位,因此有 32 种不同的组合。这意味着你可以用 5 位组成 32 个不同的数字。对于无符号整数,将 0 到 31(含)的整数存储在 5 位上是有意义的。

然而,这是关于无符号整数。意思是:我们也必须找到一种表示负数的方法。含义:我们必须存储数字的值,还有它的符号(+或-)。使用的表示形式是 2 的补码,并且它是到处都可以学到的表示形式(也许存在其他形式,但我不知道它们)。在此表示中,符号由第一位给出。也就是说,在 2 的补码表示中,正数以 0 开头,负数以 1 开头。

那么问题来了:0是正数还是负数?不可能两者兼而有之,因为这意味着对于给定的数字 a 位,0 可以用两种方式表示(对于 5:00000 和 10000),也就是说,我们失去了再放置一个数字的空间。我不知道他们是怎么决定的,但事实是 0 是一个正数。对于任何位数(有符号或无符号),0 仅用 0 表示。

伟大的。这为我们提供了第一个问题的答案:以 2 的补码表示的十进制数的上限是多少?我们知道第一位是符号,所以我们能表示的所有数字都必须由4位组成。我们可以有 16 个不同的 4 位字符串值,0 就是其中之一,所以上限是 15。

现在,对于负数,这变得很容易。我们已经在 5 位上可以生成 32 个值中填充了 16 个值。还剩 16 个。我们还知道 0 已经被表示了,所以我们不需要包含它。然后我们从 0 之前的数字开始:-1。由于我们有 16 个数字要表示,从 -1 开始,我们可以用 5 位表示的最低有符号整数是 -16。

更一般地,与n我们可以表示的位2^n数字。对于有符号整数,一半是正数,一半是负数。也就是说,我们有2^(n-1)正数和2^(n-1)负数。我们知道 0 被认为是正数,是我们可以表示的最大有符号整数n位是2^(n-1) - 1最低的是-2^(n-1)

2的补码表示

现在我们知道哪些数字可以用 5 位表示,问题是我们如何表示它们。

我们已经看到符号表示在第一位,并且 0 被视为正数。对于正数,它的工作方式与无符号整数相同:00000 是 0,00001 是 1,00010 是 2,等等,直到 01111,即 15。这是我们停止正符号整数的地方,因为我们已经占用了所有我们有 16 个价值观。

对于负符号整数,这是不同的。如果我们保持相同的表示(10001 是 -1,10010 是 -2,...),那么我们最终会得到 11111 为 -15,而 10000 则不被归属。我们可以决定说它是 -16,但每次使用负整数时,我们都必须检查这种特殊情况。另外,这会扰乱所有的二进制运算。我们还可以决定 10000 是 -1、10001 是 -2、10010 是 -3 等等。但这也会弄乱所有的二进制运算。

2 的补码按以下方式工作。假设您有符号整数 10011,您想知道小数是什么。

  1. 翻转所有位:10011 --> 01100
  2. 添加 1:01100 --> 01101
  3. 将其读取为无符号整数:01101 = 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 13。

10011代表-13。这种表示法非常方便,因为它是双向的。如何将 -7 表示为二进制有符号整数?从 7 的二进制表示形式 00111 开始。

  1. 翻转所有位:00111 --> 11000
  2. 添加 1:11000 --> 11001

就是这样!在 5 位上,-7 由 11001 表示。

我不会介绍它,但 2 的补码的另一个巨大优点是加法的工作方式相同。也就是说,当两个二进制数相加时,您不必关心它们是有符号还是无符号,这与后面的算法相同。

有了这个,你应该能够回答问题,但更重要的是理解答案。

这个主题非常适合理解 2 的补码:为什么用补码来表示负数?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用 5 位二进制补码表示有符号数的最高和最低整数是多少? 的相关文章

  • 截断浮点数而不向上舍入

    我有一个浮点数 我想将其截断为 3 位 但我不想向上舍入 例如 转换1 0155555555555555 to 1 015 not 1 016 我将如何在 Ruby 中做到这一点 您还可以转换为 BigDecimal 并对其调用 trunc
  • 如何创建一个在给定范围内随机打乱数字的 int 数组[重复]

    这个问题在这里已经有答案了 基本上 假设我有一个可以容纳 10 个数字的 int 数组 这意味着我可以在每个索引中存储 0 9 每个数字只能存储一次 如果我运行下面的代码 int num new int 10 for int i 0 i l
  • 如何用 NumPy 求解齐次线性方程?

    如果我有这样的齐次线性方程 array 0 75 0 25 0 25 0 25 1 1 0 0 1 0 1 0 1 0 0 1 我想得到它的非零解 怎样才能做到NumPy http en wikipedia org wiki NumPy E
  • c++ - 将“std::vector”的内容保存到文件

    我使用 writeFileBytes 下面的函数来写入a的内容std vector
  • 替代位置基础系统(十六进制、八进制、二进制)如何工作?如何将它们转换为十进制?

    我以前在编程课上没有学过这一点 但现在我需要知道它 有哪些学习这些数字以及如何转换它们的好资源 我几乎会像记住乘法表一样记住这些 在我们日常的十进制系统中 基数或radix http en wikipedia org wiki Radix
  • 在 Haskell 中将字节转换为 Int64s/Floats/Doubles

    我正在尝试解析 Haskell 中的二进制文件格式 Apple 的二进制属性列表格式 该格式所需的内容之一是将字节序列视为 a 无符号 1 2 或 4 字节整数 b 有符号 8 字节整数 c 32 位floats d 64 位doubles
  • 如何用php将文件内容转换为字节数组

    我想用PHP将上传的文件保存 插入 到数据库中 数据库字段的类型是varbinary 最后 我想要获得 VarBinary 输出 的内容 就像在 C 中读取文件然后将其存储在字节数组中并将数组插入到 VarBinary 中一样 我与数据库的
  • 给定与总和匹配的长度的唯一 3 位数字 (-1,0,1) 序列的数量

    假设您有一个长度为 n 即空格数 的垂直游戏板 你有一个三面骰子 有以下选项 前进一 停留和后退 如果您低于或高于棋盘游戏空间的数量 则该游戏无效 一旦到达棋盘末端 唯一有效的动作就是 停留 给定确切的骰子投掷次数 t 是否可以通过算法计算
  • 如何从 wfstream 读取二进制数据?

    我从文件读取数据时遇到一个小问题 我希望能够读取 wstring 以及任意大小的原始数据块 大小以字节为单位 std wfstream stream file c str std wstring comType stream gt gt c
  • 二进制增量存储

    我正在寻找一种二进制增量存储解决方案来版本化大型二进制文件 数字音频工作站文件 使用 DAW 文件时 与用于存储原始数据 波形 的大量数据相比 大多数更改 尤其是在混音结束时 都非常小 如果我们的 DAW 文件有一个版本控制系统 让我们可以
  • 用圆形雷达数学方法表示点

    我正在编写一个简单的应用程序 它可以向您显示您周围的朋友 但不是在法线地图中 而是在像 UI 这样的真正圆形雷达上 https i stack imgur com Au3IP png https i stack imgur com Au3I
  • C# 中四舍五入到偶数

    我没有看到 Math Round 的预期结果 return Math Round 99 96535789 2 MidpointRounding ToEven returning 99 97 据我了解 MidpointRounding ToE
  • 反转二进制网络

    如何反转二元方程 以便找到哪些输入将产生给定的输出 Example Inputs i0 through i8 Outputs o0 through o8 Operators XOR AND 二元方程 1 i0 1 i1 0 i2 1 i3
  • 基于时间的算法评分

    我们希望创建一种评分算法 在更短的时间内获得更高的分数 在更长的时间内获得更少的分数 需要注意的是 没有实际范围 因此时间范围可以从 100 毫秒到长达 10 分钟或更长时间 点范围为 0 到 50 谢谢你的帮助 你可以简单地把它变成一个线
  • 如何通用地减少子集平均值的计算?

    Edit 由于似乎没有人阅读此链接的原始问题 因此让我在这里介绍一下它的概要 正如其他人所问的 最初的问题是 给定大量值 总和将超过数据类型的值Double那么如何计算这些值的平均值呢 有几个答案说要按集合计算 比如取50个和50个数字 计
  • 如何在Python中显示坐标网格线的变换?

    假设我有常规的笛卡尔坐标系 x y 并且我考虑一个矩形网格区域 D 分成小方块 我想看看域 D 如何在 Python 中的坐标变换 T x y gt u x y v x y 下映射 我正在寻找这样的东西 See here https mat
  • 单位安全平方根

    我只是想知道如何以与 F 正确交互的方式编写用户定义的平方根函数 sqrt 单位制 http blogs msdn com andrewkennedy archive 2008 09 04 units of measure in f par
  • 这个按位运算如何检查 2 的幂?

    我正在看一些应该很简单的代码 但我的数学在这里严重失败 下面是一个使用以下条件检查数字是否为 2 的幂的条件 if num 1 num num 1 make num pow of 2 我的问题是 如何在 num 和 num 1 之间使用按位
  • GCC的sqrt()编译后如何工作?使用哪种root方法?牛顿-拉夫森?

    只是对标准感到好奇sqrt 来自 GCC 上的 math h 我自己编码的sqrt 使用牛顿拉夫森来做到这一点 是的 我知道 fsqrt 但CPU是如何做到这一点的呢 我无法调试硬件 现代 CPU 中的典型 div sqrt 硬件使用 2
  • 比较批处理文件中的两个数字

    我在这个网站上搜索了我的问题 但没有找到解决我问题的方法 系统为玩家和计算机提供一个从 2 到 12 的随机数 这有 3 部分 X 大于 Y 如果 X 小于 Y 以及当 X 与 Y 相同 当我开始 bat 效果很好 我选择Play Game

随机推荐

  • 将 spring-batch-admin 集成到现有的 spring boot 后无法导入属性

    我曾经做过一个使用 spring batch 和 spring boot 的项目 我遵循了如何集成它的确切规则 1 删 除所有 EnableBatchProcessing 2 添加ServletConfiguration和WebappCon
  • 在 Razor 视图中根据需要创建字段

    我想在剃刀视图中根据需要创建一个文本框字段 我无法使用验证属性 Required 因为字段名称是动态生成的 我检查了这个答案这设置了data val required字段到true使用 JavaScript 有没有其他方法可以做到这一点 因
  • 突出显示 matplotlib 图中的任意点

    我是 python 和 matplotlib 的新手 我试图突出显示 matplotlib 中现有绘图中符合特定标准的几个点 初始绘图的代码如下 pl plot t y pl title Damped Sine Wave with 1f H
  • IntelliJ IDEA + Gradle - 如何记录从 IDE 运行的长时间运行的 Gradle 任务?

    IntelliJ IDEA 有时需要很长时间来执行 Gradle 刷新任务或运行 Gradle 任务 它会旋转很长一段时间 让你想知道它到底旋转了多远 或者它是否在做任何事情或冻结了 例如 这已经运行了很长时间 但我没有办法看到发生了什么
  • Java中的字符串表示

    字符串在 Java 中表示为对象 因此 一个对象包含存储在实例变量对象内 对象还包含对该对象进行操作的代码体 这些代码体称为methods 包含相同类型值和相同方法的对象被分组为类 类可以被视为这些对象的类型定义 那么 Java中的Stri
  • 检查或查找值是否存在于另一列中

    这应该很容易 但我就是不明白出了什么问题了 我有 3 列 第一列和第三列有数字 我希望第二列显示第 1 列中的数字是否存在于第 3 列中 我在网上找到了一个代码 IF ISERROR VLOOKUP A7 C 2 C 3400 1 FALS
  • ASP.Net MVC 长时间运行进程

    我需要为不同的财务周期生成报告屏幕 由于这是一个相当大的数据集 包含很多规则 因此该过程可能需要很长时间才能运行 某些报告返回需要一个多小时 在 MVC 中处理这种情况的最佳方法是什么 我担心 屏幕锁定 表现 可用性 请求超时 这些确实是合
  • 如何在Xcode中使用svn合并冲突(文件project.pbxproj)?

    我们团队中有两名成员 我们使用Xcode的SCM 使用SVN 来管理我们的源代码文件 我们都将文件添加到我们的 Xcode 项目中 他已经致力于SVN服务器 当我更新时 Xcode发现有冲突project pbxproj文件 然后我选择退出
  • 为什么在 Ruby 中 splat 后可以有必需参数,但不能有可选参数? [复制]

    这个问题在这里已经有答案了 这在 Ruby 中是可能的 class SomeClass def initialize a b c end end 但这不是 class SomeClass def initialize a b c anyth
  • 从继承的变量构造派生类

    也许标题有点令人困惑 所以我会尽力确保它尽可能清晰 基本上 我正在尝试创建一个游戏 其中有一个名为 Creature 的抽象基类 并且在其下有几个派生的幻想生物类 现在我的问题是 如果我有一个具有受保护变量 intstrength 和 in
  • 适应(求解)复杂方程的算法(隐式函数 f(x,y) )

    我正在尝试调整一些方程 隐式 f x y 以便能够列出相应 X 值的 Y 方程可以是例如如下 y 2 x 3 2x 3xy X 2 y 2 1 3 x 2y 3 0 X 3 y 3 3xy 2 x 1 X 3 y 2 6xy sqrt y
  • 容器启动失败。启动失败,然后监听 PORT 环境变量定义的端口

    我构建了容器映像 但是当我尝试从gcloud在命令行或 Cloud Console 中 我收到以下错误 容器无法启动 无法启动并侦听 PORT 环境变量定义的端口 在您的代码中 您可能没有侦听传入的 HTTP 请求 或者您正在侦听错误端口上
  • mb_strlen() 和 strlen() 不会从对 PHP 的 Ajax 调用返回正确的值

    如何在 PHP 中添加对传递的 username 长度的检查 该网站是 UTF 8 但我相信 Javascript 使用不同的编码 你可以在评论中看到我在 PHP 中尝试了不同的东西 但它们不起作用 我尝试过但没有成功的方法 PHP 是一个
  • Twitter4j 中 Twitter 用户的电子邮件

    twitter4j 可以获取授权应用程序 网站的 Twitter 用户的电子邮件吗 我能够得到如下的屏幕名称 User user twitter showUser id String screenName user getScreenNam
  • Composer.json 中的 require 和 require-dev 部分有什么区别?

    我开始使用 Composer 我对它知之甚少 并且对 Web 应用程序开发有一些经验 我只是走过Nettuts 教程 所以我有关于作曲家的基本问题 require laravel framework 4 0 way generators d
  • 在 VB.NET 中创建控件数组

    如何制作控制数组 或等价物 我习惯使用 Visual Basic 6 它在复制粘贴和控件时提供是否创建控件数组的选项 控制阵列早已不复存在 面向对象的方法现在已成为 VB 的法则 您需要使用某种类型的集合 例如list
  • Eclipse 如何找到 JRE 或 JDK 位置?

    根据 Eclipse 常见问题解答 我读到了 Eclipse DOES NOT consult the JAVA HOME environment variable 我的疑问是 eclipse 是如何初始化的Virtual Machine
  • 使用 AppleScript 更改文件夹的图标?

    我创建了一个对我非常有帮助的AppleScript 我希望是否可以自动更改文件夹图标 该脚本非常简单 它创建一个文件夹 然后在同一文件夹中创建一个空文本文件 这是脚本 tell application Finder set newfolde
  • 运行时错误 440 VB6

    我创建了一个基于 ocx 文件的 exe 程序 并使用 VB 打包和部署向导将 exe 文件作为程序安装在非 vb 环境中 问题是运行该程序时出现此错误 运行时错误 440 自动化错误 您认为问题出在哪里 Thanks 440自动化错误通常
  • 用 5 位二进制补码表示有符号数的最高和最低整数是多少?

    我了解二进制的工作原理 并且可以将二进制计算为十进制 但我对带符号的数字感到困惑 我找到了一个计算器进行转换 但我不确定如何找到最大值和最小值 或者在未给出二进制数的情况下进行转换 并且 StackO 中的问题似乎是关于转换特定数字或不包括