问题标签 [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.
c - 这段代码在 C 中是什么意思,“int x = ~!printf;”?
它给出:-1 ffff
谁能解释一下?
floating-point - 可以对具有 2 或 1 补码尾数的浮点系统进行归一化吗?
据我了解,归一化尾数是一个分数尾数,其中它的有效位更高,等于 1/2 的那个总是 1。这样做是为了避免在系统上重复表示相同的数字。
但是如果尾数使用 2 的补码或 1 的补码系统会发生什么。在这种情况下,如果数字为负,则强制该位为 1 将导致该位具有空值,使其无法实现其目的。另一种解决方案是在数字为负的情况下将其强制为 0,但我想它的物理实现可能会变得复杂。这让我想,是否存在具有标准化 2 或 1 补码尾数的系统?如果它们存在,它们是如何工作的?
twos-complement - 为什么我们在计算机系统中使用补码来执行减法运算?
为什么我们必须在计算机系统中使用补码(例如 2 的补码、10 的补码等)来执行减法运算?就像加法运算电路(加法器)一样,我们也有减法电路(减法器),对吧?
c - Fletcher 校验和:模 255 和是否真的与一个补码和相同
我的问题的简短背景: 我正在开发一个小型业余项目,其中的微控制器通过 UART 与 PC 通信。现在我正在使用带有 0x00 数据包分隔符字节和一个简单的 1 字节校验和的 COBS 字节填充,该校验和是二进制补码运行和或一个补码和。我的补码校验和实现与Internet 校验和非常相似(第 7 页。有趣的部分如下所示)
几天前我发现了关于 Fletcher 校验和:
Fletcher 文章
Fletcher implementation
Fletcher Wikipedia
Fletcher Wiki 页面的短代码片段:
我的问题:在上面的两篇文章中,他们都说 Fletcher 使用“一个补码 [mod(255)] 校验和”,就好像 mod-255 和一个补码和是相同的。这是真的吗?
- 与上面的补码加法器相比,使补码校验和更优越的进位位在 mod-255 和中的工作方式几乎相同,这对我来说是有意义的。但是对于 mod-255 的总和,您永远无法获得值 0xFF (-0),只有 0x00 (+0)?
- 我猜 mod-operator 比较慢(虽然它是线性的,所以你可以等待 mod- 计算直到总和结束)。
- 一个不错的功能(使用 COBS 时)是 mod-255 永远不会产生 0x00 校验字节,因为 mod-255 的总和永远不会是 0xFF(尽管即使在上面的补码加法器中也很容易修复)。
非常感谢您的参与!
亲切的问候/亨利克
bit-manipulation - 为什么 end-arround-carry 有效?
我理解为什么二进制补码有效(我们正在以 $2^n$ 为模工作)。现在,在一个补码中,我们以 $2^n-1$ 为模工作。此外,正因为如此,我们得到两个零表示,因为 $1111$ 与 $0000$ 模 $2^n-1$ 一致。我不明白的是,为什么我们需要做末端环绕携带?为什么它有效?
c - 补码算术 n C
我试图在 C 中计算 UDP 数据报的校验和。为了计算 UDP 校验和,您创建一个伪报头,将其作为数据报的前缀,然后计算伪的补码和的 16 位补码头和数据报。
为了计算一个人的补码和,我认为这可能会起作用:
这会给我计算 n 和 k 之间的补码加法的结果吗?
谢谢你。
编辑:
这是 UDP 校验和的代码:
binary - 令人困惑的二进制数
我有一个让我困惑的疑问,是 1101(base 2) = 13 (base 10) 还是 1101 (base 2) = -5 (base 10) ?
我假设当我们使用二进制补码方法时,我们使用负整数,但是当我们通常使用整数时,它是正数。我的想法正确吗?
bit-manipulation - 为什么以-2为底表示的最大负数的大小是表示的最大正数的两倍?
这里他们提到“如果单词的位数是偶数,则可以表示的最大负数的大小是可以表示的最大正数的两倍,反之亦然,如果单词有奇数位。”
重读了几遍,还是不明白。你能举个例子解释一下吗?反之亦然。
c - 有没有办法让我的补充代码更有效率并一次允许多个输出?
我使用 DIP 开关作为输入,使用 LED 作为输出,以类似于任何给定输入的补码。我正在编写一个 Arduino Uno 来尝试这样做。我对按位效率也不是很有经验;有没有办法大大减少我的代码中的行?
我目前拥有的是一堆 if 语句。
另外,我遇到的另一个问题是一次只有一个 LED 关闭。如果我翻转一个开关,然后另一个开关,我翻转的第一个开关的 LED 会在我翻转另一个开关时重新亮起。