问题标签 [twos-complement]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
12227 浏览

computer-science - 为什么是二进制补码?

我正在写一个教程来教孩子(9 到 13 岁)编程。我从计算机本身开始,它们与计算机科学没有太大关系,它更多的是关于解决计算问题的过程。

有了这个起点,我正在引导他们理解机器可以帮助我们解决某些计算问题。人们擅长抽象思维和想象力,但计算机在遵循明确规定的程序方面非常出色。他们可以以惊人的速度一次又一次地做到这一点!

我的教程中已经介绍了以二进制格式表示数字。但是你如何表示负数?在任何符号系统中都有很多方法可以做到这一点,但为计算机选择的系统有一个非常具体的原因:减少添加有符号整数值所涉及的机器数量。我们不想仅仅为了处理负数而构建和构建单独的芯片,我们希望使用我们一直用于自然数运算的相同芯片!

如果有人在街上问你(这看起来完全不现实)“计算机如何表示负数,为什么它们会这样表示?”

我的具体问题:

  1. 计算机如何表示负数?

  2. 为什么计算机以这种方式表示负数?

我猜这么多有经验的开发人员会不得不考虑一下。有些人甚至无法想出答案。我不是想浮夸,这是从实际经验中得出的,我问过专业开发人员这个问题,他们无法回答。他们面无表情。给他们 JBoss 和 JavaBeans,他们会让你充满信心。太搞笑了!我也很纠结这个问题,我每次都必须提醒自己答案,我需要一张纸或白板来制定解决方案。我希望引导学生更好地了解他们正在使用的机器。

0 投票
2 回答
819 浏览

binary - 二进制补码加法问题

我正在研究二的补码加法。基本上我需要显示 -27 到 +31 的加法,两个数字都是使用 6 位的二进制数。

我的问题是进位操作。也许我做得不对或其他什么。

-27 二进制:111011
+31 二进制:011111

我认为的答案应该是:
+4 是二进制:000010

这就是我正在做的事情:

在我看来,这是 52 而不是 4。

我究竟做错了什么?

0 投票
4 回答
3702 浏览

java - 从 Java FileInputStream 读取字节时,如何区分 -1 和 0xff?

所以,我不得不参加一个工作面试的测试,我被要求编写一个执行简单 XOR 加密的迷你应用程序,并遇到了这个问题。我使用 FileInputReader 来拉入每个字节,使用密钥执行 XOR 操作,然后将结果推回 FileOutputStream。这就是让我思考的原因。

FileInputStream 返回一个 int,一个 32 位有符号类型。当只接收一个字节时,您可以将其转换为“字节”类型。如果 FileInputStream 达到 EOF,它也会返回 -1。但是,二进制补码中的 -1 == 0xff,那么如果读取的字节真的是 0xff,而不是 EOF 怎么办?

0xff 是一个在数学上永远不会返回的字节,除非在特殊情况下(例如 EOF)?还是根据您正在阅读的数据,您可能需要考虑这种情况?

0 投票
3 回答
2662 浏览

math - 2 个负整数的减法(二进制补码)永不溢出

我在一本计算机体系结构教科书中遇到了这个问题:

从另一个严格负整数(二进制补码)中减去一个严格负整数永远不会溢出。

教科书没有继续解释这个断言。它激起了我的好奇心。

为什么这个说法是真的?

0 投票
2 回答
2370 浏览

java - 在java中将32位十六进制转换为十进制

对于作业,我必须编写一个程序,该程序将接收 8 个字符串(十六进制),然后将其转换为以 10 为基数。我不允许使用任何外部类来执行此操作。我很确定我的工作正常......仅适用于正数。我的问题是如何显示负数。一个例子是 FFFFFFFA 应该打印为 -6 这是我到目前为止的代码

我认为我对负整数的测试是正确的……因为这是 32 位可以容纳的最高值,任何超过此值的都将是溢出,因此这意味着它应该是负数。从这里我不知道该怎么做。任何指针或提示将不胜感激。如果没有办法在数学上做到这一点,我觉得我将不得不将十六进制转换为二进制,然后对其执行二进制补码,但我又不知道从哪里开始。

提前致谢

0 投票
2 回答
1548 浏览

bit-manipulation - 如何加减 16 位浮点半精度数?

如何加减 16 位浮点半精度数?

假设我需要加减:

1 10000 0000000000

1 01111 1111100000

2 的补码形式。

0 投票
1 回答
6196 浏览

binary - 将十六进制转换为二进制以及 16 位的一和二的补码

我正在尝试将 FFAD(十六进制)转换为十进制值,然后对其进行 1 和 2 的补码。FFAD 表示为一个 16 位整数。当我将 FFAD 转换为基数 2 时,我得到 1111111110101101。

我的问题是我怎么知道它是否是负数?

我有二进制文件,现在要正常进行补码,我会将最后一位从 0 更改为 1,然后翻转所有位,但作为 16 位整数,我没有更多可用位。由于第 16 位是 1,这是否意味着它是负数?我该怎么做呢?我只是对这个问题感到困惑,任何指针都将不胜感激。

0 投票
6 回答
16055 浏览

binary - 负数作为2的补码存储在内存中,CPU如何知道它是负数还是正数?

-1 可以用 4 位二进制表示为(2 的补码)1111

15 也表示为 1111。

那么,当 CPU 从内存中获取值时,它如何区分 15 和 -1 呢?

0 投票
2 回答
4552 浏览

twos-complement - 二进制补码表示所需的最小位数

我需要找出我们如何表示二进制补码系统-1-3的最小位数。我计算了答案1111但答案似乎不正确。如果我能得到一些帮助,我将不胜感激。谢谢

0 投票
1 回答
1240 浏览

java - 调整字节 [] 二进制补码表示的整数

我有一个数字的二进制补码表示,在一个字节数组中,我想扩展它以使用更大的字节数组。byte[](你可以从s中得到补码BigInteger

所以我的新字节数组必须具有相同的符号位(即最高位),然后其他所有内容都移位。

所以:

我在正确的轨道上吗?我很难理解,字节长度的十六进制文字工作。还是我的十六进制文字必须是 int 大小的?如果是这样,我将不得不放弃我的一切。

所以是:

等价物?