问题标签 [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.
twos-complement - 一个补码加法器
我不确定这是论坛的正确部分,以防万一,请告诉我。
我正在学习计算机组织和设计,传奇的Patterson & Hannessy说“一个补码加法器确实需要一个额外的步骤来减去一个数字,因此今天二进制补码占主导地位”。
补码需要什么额外的操作?
python - 为什么 ~0b1 在 Python 2.7 中打印出 -2?
我(有点)熟悉一个人的补码,但我可以对 Python 2.7 进行复习。
为什么~0b1
打印出来-2
?
我知道一个补码将 1 转换为 0,反之亦然。我希望~0b1
打印0b0
或0
。
是否会print
自动将字节文字转换为某种形式的int
?
任何帮助表示赞赏。
c - 0 - 0 的补码
对于背景,我正在尝试计算存储在常量内存中的 IP 数据包的校验和(不能就地修改它)。在进行校验和之前,我应该假设数据包中现有的校验和为 0。与其将所有数据复制到临时缓冲区并存储 0,不如对整个数据包进行校验和,然后减去结果中的现有校验和。
为此,我正在寻找我在这里找到的减法的补码版本。不幸的是,如果我使用它,并从 0 中减去 0,我会得到 0x1111 而不是预期的 0:
- 将 0 转换为一个补码:[1111]
- 接下来,我们添加 0:[1111]
- 没有溢出位,所以我们完成了......
我本来希望 0 - 0 是 0——我错过了什么?
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 的简写
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 的特性。
r - R,对聚合 data.table 的补充
是否可以与 R data.tables 中的补码进行聚合。下面的例子。
获取类别中特定单词的数量
我如何计算该类别中所有其他单词的数量?或者与此相关的是,该词所属的其他类别的数量?像下面这样的东西?
我在在线教程或问题中找不到任何帮助。有没有简单的方法来获得补语。Data.table 解决方案会很好,因为使用 50M 行表。谢谢!
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?
c - 位运算符可以有未定义的行为吗?
按位运算符(~
、&
和)对其提升的操作数的按位表示进行运算|
。^
这样的操作会导致未定义的行为吗?
例如,~
运算符在 C 标准中是这样定义的:
6.5.3.3 一元算术运算符
运算符的结果
~
是其(提升的)操作数的按位补码(即,当且仅当未设置转换操作数中的相应位时,结果中的每个位都被设置)。整数提升在操作数上执行,结果具有提升的类型。如果提升的类型是无符号类型,则表达式~E
等效于该类型中可表示的最大值 minusE
。
在所有架构上,~0
生成符号位设置为1
且所有值位设置为的位模式1
。在一个补码架构上,这种表示对应于一个负零。这个位模式可以是陷阱表示吗?
对于更常见的架构,是否还有其他涉及简单位运算符的未定义行为示例?
c - 为什么使用8位溢出的1和2的补码中的128?
假设我想用 8 位表示 128 的 1 和 2 的补码,没有符号位
那岂不是:
一个人的补充:0111 1111
二进制补码:0111 1110
无溢出
但正确答案是:
一个人的补充:0111 1111
二进制补码:0111 1111
溢出
附加问题:
1 和 2 的补码中的 1 分别是0000 0001
和0000 0001
。你怎么不像我们用 128 那样翻转位?