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

c - 如何检测C中带符号整数的编码?

ISO C 标准允许有符号整数的三种编码方法:二进制补码、二进制补码和符号/大小。

在运行时(或者如果有更好的解决方案,在其他时间)检测编码的有效或好的方法是什么?我想知道这一点,这样我就可以针对不同的可能性优化一个 bignum 库。

我计划在每次程序运行时计算它并将其存储在一个变量中,这样它就不必非常快 - 我假设编码在程序运行期间不会改变:-)

0 投票
2 回答
1374 浏览

c++ - 将较小整数的最大值分配给较大的整数

考虑以下代码:

现在,我完全期望它输出255,但它输出4294967295

我知道 C++ 中的整数提升,但我不明白为什么会发生这种情况。我理解它的方式,表达式~uint8_t(0)应该以1111 1111二进制计算。然后,~运算符将int通过符号将值扩展为0000 0000 0000 0000 0000 0000 1111 1111. 然后应该将此提升的值分配给左值x,从而产生x == 255.

但显然我没有正确理解这一点。我错过了什么?

0 投票
2 回答
274 浏览

binary - 为什么一个人的补码表示比其他人更好?

似乎有符号数字的补码表示现在是最流行的(并且可能是现代硬件中使用的唯一表示)。为什么它比其他人更好?

0 投票
2 回答
1760 浏览

binary - 1 和 2 的补码系统

我试图了解这两个系统之间的差异以及它们对 C 编程的影响。

根据我从 Wikipedia 中了解到的信息:

  1. 两个系统都用于表示负数
  2. 一个补码按位不应用于负数(系统有 +0 和 -0)
  3. 二进制补码与第 2 步一样并加 1(消除 +/-0)

我还缺少其他东西吗?

我的问题:

  1. 哪些架构支持哪些系统?现在最常见的是什么(1 或 2 的补码)?
  2. 在用 C 编程时,我们应该在什么意义上考虑这些系统?它主要只在嵌入式世界中有意义吗?

提前致谢!

0 投票
2 回答
308 浏览

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

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

0 投票
3 回答
401 浏览

c++ - -1 和 ~0 有什么区别

标题确实说明了一切:减一和tilda(补码)零有什么区别?

在讨论指定设置所有位的位掩码的最佳方法时,出现了这个问题。以下哪个更好?

或者

是否有任何其他用途,它会反过来吗?

更新:在stackoverflow.com/q/809227/34509上对此主题进行了类似的讨论 ,我在之前的研究中错过了这些讨论。感谢 Johannes Schaub 指出这一点。

0 投票
1 回答
6196 浏览

binary - 将十六进制转换为二进制以及 16 位的一和二的补码

我正在尝试将 FFAD(十六进制)转换为十进制值,然后对其进行 1 和 2 的补码。FFAD 表示为一个 16 位整数。当我将 FFAD 转换为基数 2 时,我得到 1111111110101101。

我的问题是我怎么知道它是否是负数?

我有二进制文件,现在要正常进行补码,我会将最后一位从 0 更改为 1,然后翻转所有位,但作为 16 位整数,我没有更多可用位。由于第 16 位是 1,这是否意味着它是负数?我该怎么做呢?我只是对这个问题感到困惑,任何指针都将不胜感激。

0 投票
1 回答
7602 浏览

compiler-warnings - 警告:'整数转换导致截断'

我在这里收到警告。警告说“整数转换导致截断”。即使我删除了类型转换(U16),它仍然存在。

如何解决此警告?我使用了下面的代码并删除了警告,但不确定它是否正确。

提前致谢!

0 投票
3 回答
46698 浏览

complement - 如何计算正数和负数的补码?

如果我用一个补码来表示数字,我应该得到什么结果?
比如数字01110(一个正数),它的补码应该是01110还是10001?
如果数字为 10001(负数),则补码值为 01110?

0 投票
1 回答
178 浏览

bit-manipulation - 2's(N) = 1's(N-1)

有一个有趣的事实:

数字 N 的 2 的补码等于数字 N 的 1 的补码减去 1。

下面的结果是显而易见的。

如何在第二个结果的帮助下证明第一个结果?