问题标签 [ones-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 投票
1 回答
167 浏览

c - 这段代码在 C 中是什么意思,“int x = ~!printf;”?

它给出:-1 ffff

谁能解释一下?

0 投票
1 回答
459 浏览

floating-point - 可以对具有 2 或 1 补码尾数的浮点系统进行归一化吗?

据我了解,归一化尾数是一个分数尾数,其中它的有效位更高,等于 1/2 的那个总是 1。这样做是为了避免在系统上重复表示相同的数字。

但是如果尾数使用 2 的补码或 1 的补码系统会发生什么。在这种情况下,如果数字为负,则强制该位为 1 将导致该位具有空值,使其无法实现其目的。另一种解决方案是在数字为负的情况下将其强制为 0,但我想它的物理实现可能会变得复杂。这让我想,是否存在具有标准化 2 或 1 补码尾数的系统?如果它们存在,它们是如何工作的?

0 投票
1 回答
221 浏览

twos-complement - 为什么我们在计算机系统中使用补码来执行减法运算?

为什么我们必须在计算机系统中使用补码(例如 2 的补码、10 的补码等)来执行减法运算?就像加法运算电路(加法器)一样,我们也有减法电路(减法器),对吧?

0 投票
3 回答
821 浏览

kotlin - 为什么 Kotlin 认为负零小于正零

我刚开始学习 Kotlin,在基本类型的文档中遇到了一个奇怪的句子:

-0.0 被认为小于 0.0

我知道它们的值在补码中不会相同,但我不知道如何在代码中使用它。

0 投票
1 回答
1389 浏览

c - Fletcher 校验和:模 255 和是否真的与一个补码和相同

我的问题的简短背景: 我正在开发一个小型业余项目,其中的微控制器通过 UART 与 PC 通信。现在我正在使用带有 0x00 数据包分隔符字节和一个简单的 1 字节校验和的 COBS 字节填充,该校验和是二进制补码运行和或一个补码和。我的补码校验和实现与Internet 校验和非常相似(第 7 页。有趣的部分如下所示)

几天前我发现了关于 Fletcher 校验和:
Fletcher 文章
Fletcher implementation
Fletcher Wikipedia

Fletcher Wiki 页面的短代码片段:

我的问题:在上面的两篇文章中,他们都说 Fletcher 使用“一个补码 [mod(255)] 校验和”,就好像 mod-255 和一个补码和是相同的。这是真的吗?

  1. 与上面的补码加法器相比,使补码校验和更优越的进位位在 mod-255 和中的工作方式几乎相同,这对我来说是有意义的。但是对于 mod-255 的总和,您永远无法获得值 0xFF (-0),只有 0x00 (+0)?
  2. 我猜 mod-operator 比较慢(虽然它是线性的,所以你可以等待 mod- 计算直到总和结束)。
  3. 一个不错的功能(使用 COBS 时)是 mod-255 永远不会产生 0x00 校验字节,因为 mod-255 的总和永远不会是 0xFF(尽管即使在上面的补码加法器中也很容易修复)。

非常感谢您的参与!

亲切的问候/亨利克

0 投票
0 回答
363 浏览

bit-manipulation - 为什么 end-arround-carry 有效?

我理解为什么二进制补码有效(我们正在以 $2^n$ 为模工作)。现在,在一个补码中,我们以 $2^n-1$ 为模工作。此外,正因为如此,我们得到两个零表示,因为 $1111$ 与 $0000$ 模 $2^n-1$ 一致。我不明白的是,为什么我们需要做末端环绕携带?为什么它有效?

0 投票
0 回答
814 浏览

c - 补码算术 n C

我试图在 C 中计算 UDP 数据报的校验和。为了计算 UDP 校验和,您创建一个伪报头,将其作为数据报的前缀,然后计算伪的补码和的 16 位补码头和数据报。

为了计算一个人的补码和,我认为这可能会起作用:

这会给我计算 n 和 k 之间的补码加法的结果吗?

谢谢你。

编辑:

这是 UDP 校验和的代码:

0 投票
0 回答
78 浏览

binary - 令人困惑的二进制数

我有一个让我困惑的疑问,是 1101(base 2) = 13 (base 10) 还是 1101 (base 2) = -5 (base 10) ?

我假设当我们使用二进制补码方法时,我们使用负整数,但是当我们通常使用整数时,它是正数。我的想法正确吗?

0 投票
1 回答
84 浏览

bit-manipulation - 为什么以-2为底表示的最大负数的大小是表示的最大正数的两倍?

这里他们提到“如果单词的位数是偶数,则可以表示的最大负数的大小是可以表示的最大正数的两倍,反之亦然,如果单词有奇数位。”

重读了几遍,还是不明白。你能举个例子解释一下吗?反之亦然。

0 投票
2 回答
79 浏览

c - 有没有办法让我的补充代码更有效率并一次允许多个输出?

我使用 DIP 开关作为输入,使用 LED 作为输出,以类似于任何给定输入的补码。我正在编写一个 Arduino Uno 来尝试这样做。我对按位效率也不是很有经验;有没有办法大大减少我的代码中的行?

我目前拥有的是一堆 if 语句。

另外,我遇​​到的另一个问题是一次只有一个 LED 关闭。如果我翻转一个开关,然后另一个开关,我翻转的第一个开关的 LED 会在我翻转另一个开关时重新亮起。