问题标签 [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 回答
786 浏览

twos-complement - 一个补码加法器

我不确定这是论坛的正确部分,以防万一,请告诉我。

我正在学习计算机组织和设计,传奇的Patterson & Hannessy说“一个补码加法器确实需要一个额外的步骤来减去一个数字,因此今天二进制补码占主导地位”。

补码需要什么额外的操作?

0 投票
1 回答
877 浏览

c++ - 为什么 0xff 在 C++ 中等于负 0

我看到一些看起来像这样的代码:

所以这会用位 1 填充对象数组的每个字段。然后有多个地方通过检查 ~0(负零)来检查对象的字段是否尚未填充:

该 Object 类上的字段是 unsigned int 类型。我很困惑为什么 0xff 在无符号整数上可以被评估为等于〜0?我看到另一篇关于0xff 在 2 的补码系统上等于 -1 的帖子,并发现另一篇认为这意味着 C++ 程序是否将 0xff 解释为 -1 或 ~0 取决于系统?

当填充 0xff 时,C++ 中检查整数的可移植方式到底是什么?是否应该根据 unsigned int 或 signed int 检查?我很混乱...

0 投票
1 回答
1192 浏览

python - 为什么 ~0b1 在 Python 2.7 中打印出 -2?

我(有点)熟悉一个人的补码,但我可以对 Python 2.7 进行复习。

为什么~0b1打印出来-2

我知道一个补码将 1 转换为 0,反之亦然。我希望~0b1打印0b00

是否会print自动将字节文字转换为某种形式的int?

任何帮助表示赞赏。

0 投票
2 回答
520 浏览

c - 0 - 0 的补码

对于背景,我正在尝试计算存储在常量内存中的 IP 数据包的校验和(不能就地修改它)。在进行校验和之前,我应该假设数据包中现有的校验和为 0。与其将所有数据复制到临时缓冲区并存储 0,不如对整个数据包进行校验和,然后减去结果中的现有校验和。

为此,我正在寻找我在这里找到的减法的补码版本。不幸的是,如果我使用它,并从 0 中减去 0,我会得到 0x1111 而不是预期的 0:

  1. 将 0 转换为一个补码:[1111]
  2. 接下来,我们添加 0:[1111]
  3. 没有溢出位,所以我们完成了......

我本来希望 0 - 0 是 0——我错过了什么?

0 投票
1 回答
201 浏览

x86-64 - 为什么 1 的补码仍然用于编码向量指令?

在回答中,jww指出 1 的补码仍用于编码英特尔架构上的向量指令,Ruslan 澄清说,随着自动向量化变得普遍,这些指令被更多地使用。

1 的补码是否有一个优势导致它继续在这些指令中使用,或者它只是出于历史原因而使用?

引用 jww:

来自英特尔® 64 和 IA-32 架构软件开发人员手册2A,第 3-8 页:

3.1.1.8 描述部分

然后通过信息部分的数量来描述每条指令。“描述”部分更详细地描述了指令的用途和所需的操作数。

描述部分可能使用的术语摘要:
* Legacy SSE:指 SSE、SSE2、SSE3、SSSE3、SSE4、AESNI、PCLMULQDQ 以及任何未来的指令集,这些指令集引用 XMM 寄存器并在没有 VEX 前缀的情况下进行编码。
* VEX.vvvv。指定源或目标寄存器的 VEX 位域(以 1 的补码形式)。
* rm_field:ModR/M r/m 字段和任何 REX.B
的简写 * reg_field:ModR/M reg 字段和任何 REX.R 的简写

0 投票
2 回答
274 浏览

c - C如何处理一个补码体系结构中的数字0?

我最近一直在研究表示数字的补码系统,据我了解,数字 0 有两种变体。有一个负零 (-0) 和一个正零 (+0)。

我的问题是,在一个补码架构上,这个异常在 C 中究竟是如何处理的?C 是区分 -0 和 +0 还是将这两种形式都简单地视为零。

如果在测试为零时 +0 和 -0 都返回 TRUE,那么我想知道如果我们输入 -0 作为其输入,以下示例代码将如何计算整数中设置的位数。

由于 -0 在一个补码中将其所有位设置为 1,因此 -0 应该返回任何其他数字中设置的最高位数;但是,该代码似乎无法通过 的循环测试条件x != 0,甚至不会进入循环,从而给出不正确的结果。

是否有可能在 C 中,在一个补码体系结构中,使循环条件对正零敏感,如下所示:x != +0另外,如果我从 +0 中减去 1,我会得到 -0 还是 -1。换句话说,+0 - 1 = -0 在一个补码体系结构中吗?

总而言之,为了在这个讨论中不要走得太远,我只是想知道 C 如何处理一个补码体系结构中数字 0 的特性。

0 投票
2 回答
112 浏览

r - R,对聚合 data.table 的补充

是否可以与 R data.tables 中的补码进行聚合。下面的例子。

获取类别中特定单词的数量

我如何计算该类别中所有其他单词的数量?或者与此相关的是,该词所属的其他类别的数量?像下面这样的东西?

我在在线教程或问题中找不到任何帮助。有没有简单的方法来获得补语。Data.table 解决方案会很好,因为使用 50M 行表。谢谢!

0 投票
1 回答
4369 浏览

ones-complement - Range of Values Represented by 1's Complement with 7 bits

Assume that there are 7-bits that are available to store a binary number. Specify the range of numbers that can be represented by 1's Complement. I found that the range for 2's Complement is -64 ≤ 0 ≤ 63. How do I do this for 1's Complement?

0 投票
1 回答
1440 浏览

c - 位运算符可以有未定义的行为吗?

按位运算符(~&和)对其提升的操作数的按位表示进行运算|^这样的操作会导致未定义的行为吗?

例如,~运算符在 C 标准中是这样定义的:

6.5.3.3 一元算术运算符

运算符的结果~是其(提升的)操作数的按位补码(即,当且仅当未设置转换操作数中的相应位时,结果中的每个位都被设置)。整数提升在操作数上执行,结果具有提升的类型。如果提升的类型是无符号类型,则表达式~E等效于该类型中可表示的最大值 minus E

在所有架构上,~0生成符号位设置为1且所有值位设置为的位模式1。在一个补码架构上,这种表示对应于一个负零。这个位模式可以是陷阱表示吗?

对于更常见的架构,是否还有其他涉及简单位运算符的未定义行为示例?

0 投票
2 回答
2524 浏览

c - 为什么使用8位溢出的1和2的补码中的128?

假设我想用 8 位表示 128 的 1 和 2 的补码,没有符号位

那岂不是:

一个人的补充:0111 1111

二进制补码:0111 1110

无溢出

但正确答案是:

一个人的补充:0111 1111

二进制补码:0111 1111

溢出

附加问题:

1 和 2 的补码中的 1 分别是0000 00010000 0001。你怎么不像我们用 128 那样翻转位?