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

decimal - 使用 16 位将十进制数转换为 2 的补码

问题:

使用 16 位的 2 补码中的十进制数 -234 是多少?


我只需要将 234 转换为二进制吗?

0 投票
2 回答
12099 浏览

javascript - 将有符号十进制转换为用二进制补码编码的十六进制

我需要通过二进制补码表示法将有符号整数编码为十六进制。例如我想转换

到目前为止,我一直在研究以下几行:

这与 Wolfram Alpha显示的内容相匹配,但我不确定如何获得数字的签名 24 位 int 表示 (ffffa0c9)。

我已经研究出如何获取无符号二进制数并将其表示为二进制补码:

但我不确定将这个数字的二进制表示转换为十六进制。

有任何想法吗?

0 投票
3 回答
712 浏览

c - 在非二进制补码系统上,普通字符通常/总是无符号吗?

显然,标准对此只字未提,但从实际/历史的角度来看,我更感兴趣:具有非二进制补码算术的系统是否使用char无符号的普通类型?否则,您可能会遇到各种奇怪的情况,例如 null 终止符的两种表示形式,以及无法表示char. 这种奇怪的系统真的存在吗?

0 投票
3 回答
1103 浏览

hardware - 是否有称为“2 的补码”的硬件单元?

我知道要进行减法运算,您应该对第二个数字进行 2 的补码转换。是否有专门的硬件来检查 MSB,如果发现它是 1,它会进行转换吗?

另外,这个系统是否用于浮点减法?

0 投票
2 回答
37485 浏览

assembly - sra(算术右移)与 srl(逻辑右移)

请看这两条伪汇编代码:

1)

2)

在第一种情况下,输出是:
212
13
13

后者是:
-212
107374...
-14
但不应该:sra (-53) = - (srl 53) ?

0 投票
2 回答
308 浏览

twos-complement - 为什么补码中的位反转?

在为二进制补码添加 1 之前存储带补码的负数时,为什么除了符号之外的所有位都反转了?我想如果唯一不同的是标志,那就更简单了。我能想到的唯一原因是它以某种方式使计算机更容易。

0 投票
3 回答
28979 浏览

binary - 二进制2的补码乘法?

我必须手动解决 MIPS 乘法问题,但我遇到了麻烦。

我有两个寄存器,$8其中包含 -1073741824 的二进制补码表示(即 2^30)并且$9二进制补码为 +3,我需要找到此 MIPS 指令的结果

我很迷茫。我是否需要先将值转换为二进制补码然后使用二进制乘法?

0 投票
2 回答
158 浏览

c++ - 减去两个未知位大小的值

我正在尝试使用二进制补码将两个值相减。我有溢出位的问题。由于我的容器包含一个无限位大小的整数,我不知道结果的最高位是真的来自结果还是只是溢出。我如何在不使用的情况下摆脱溢出-(我不能这样做1 << bits - 1,因为这将涉及使用operator-尚未工作的容器)

0b1111011111 - 0b111010000 -> 0b1111011111 + 0b000110000 -> 1000001111

vs(通常)

0b00000101 - 0b000000001 -> 0b00000101 + 0b11111111 -> 0b100000100 -> 0b00000100

0 投票
3 回答
24953 浏览

java - java中2的补码十六进制数到十进制数

我有一个表示 2 的补码的十六进制字符串。有没有一种简单的方法(库/函数)可以将十六进制转换为十进制而不直接使用它的位?

EG 这是给定左侧十六进制的预期输出:

谢谢!

0 投票
1 回答
10142 浏览

integer - VHDL 补码计数器问题:将 std_logic 转换为整数

本质上,我的问题是:“这不是更容易吗? ”;什么是'this',如下(代码也是):

我想要一种“补码”计数器功能,用 VHDL 实现,它基本上会在每一步中反转/补码/不是计数器值,从而为测试提供稍微丰富的位模式。当然,我希望它是可综合的(因此计数器值可以分配给引脚)和可移植代码(即仅实现 IEEE 库,没有STD_LOGIC_ARITH)。我也不想默认将所有都视为无符号(所以我想避免STD_LOGIC_UNSIGNED)。

简而言之,这个计数器可以描述为:给定初始值 C[0],那么每个时钟滴答的值将是:

...或者给定 C 是 16 位宽(这将导致无符号 Cmax = 65535 和 Cmax/2 = 32768),它也可以写成:

这里的诀窍是计数器应该只增加一次 - 如果它在互补和“正常”范围内都增加,那么不会发生任何变化(方程将在两个值之间“振荡”)。

 

因此,鉴于检查 C[i]<(Cmax/2) 与检查 C 的最高有效位(第 15 位)基本相同,我认为我可以使用以下方法在 VHDL 中轻松实现类似的东西:

 

男孩,我对“容易”的看法是不是错了:)

第一个问题是,上面的等式有可能以 65535+1 结尾,在这种情况下,结果需要 17 位(即溢出);就我而言,我只想截断/忽略任何“进位”。

这导致了使用什么的问题:

  • std_logic_vector已定义补码not();但它没有+定义(添加)
  • natural/integer可能在内部占用 32 位,因此不必指定它们的位宽;它们支持算术+,但不支持补码not()
  • 我也试过unsigned,也有一些问题(不记得是哪个)

第 15 位(MSB)只有在 Y 为 时才能提取std_logic_vector,在这种情况下,Y(15) 为单字节std_logic- 但随后需要将其转换为integer类型,否则+未定义加法:|

所以,我目前的解决方案(如下)首先有两个计数器寄存器的副本;一个是SIGNAL wCntReg : STD_LOGIC_VECTOR(15 DOWNTO 0);另一个是SIGNAL tmp_na : natural。然后:

  • 有两个时钟:一个“主”@ 50 MHz,另一个是“计数器”时钟:主时钟 16 倍分频(3.125 MHz)。
  • “计数器”时钟应在下降沿激活计数器值的计算
  • 计算是通过natural变量执行的(从变量中复制STD_LOGIC_VECTOR
  • 显然,std_logic只有先转换为才能integer转换为(我很幸运在网上std_logic_vector找到了该功能)。vectorize

这里最讨厌的部分是如何将natural变量值反馈回那个STD_LOGIC_VECTOR;我可以构建的唯一有效命令是:

...; 但是,请注意,此命令基本上是“设置”该值,下次运行同一命令时,该值将“生效” 。因此,它不能在“计数器”时钟进程中运行——在下面的代码中,我将它放在更快的“主”时钟进程中。

最后,下面的代码确实有效(通过 ISE WebPack 中的行为模拟) - 但是,我仍然想知道是否有更直接的方法来解决这个问题。

提前感谢您的任何答案,干杯!

 

编码: