问题标签 [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中带符号整数的编码?
ISO C 标准允许有符号整数的三种编码方法:二进制补码、二进制补码和符号/大小。
在运行时(或者如果有更好的解决方案,在其他时间)检测编码的有效或好的方法是什么?我想知道这一点,这样我就可以针对不同的可能性优化一个 bignum 库。
我计划在每次程序运行时计算它并将其存储在一个变量中,这样它就不必非常快 - 我假设编码在程序运行期间不会改变:-)
c++ - 将较小整数的最大值分配给较大的整数
考虑以下代码:
现在,我完全期望它输出255
,但它输出4294967295
。
我知道 C++ 中的整数提升,但我不明白为什么会发生这种情况。我理解它的方式,表达式~uint8_t(0)
应该以1111 1111
二进制计算。然后,~
运算符将int
通过符号将值扩展为0000 0000 0000 0000 0000 0000 1111 1111
. 然后应该将此提升的值分配给左值x
,从而产生x == 255
.
但显然我没有正确理解这一点。我错过了什么?
binary - 为什么一个人的补码表示比其他人更好?
似乎有符号数字的补码表示现在是最流行的(并且可能是现代硬件中使用的唯一表示)。为什么它比其他人更好?
binary - 1 和 2 的补码系统
我试图了解这两个系统之间的差异以及它们对 C 编程的影响。
根据我从 Wikipedia 中了解到的信息:
- 两个系统都用于表示负数
- 一个补码按位不应用于负数(系统有 +0 和 -0)
- 二进制补码与第 2 步一样并加 1(消除 +/-0)
我还缺少其他东西吗?
我的问题:
- 哪些架构支持哪些系统?现在最常见的是什么(1 或 2 的补码)?
- 在用 C 编程时,我们应该在什么意义上考虑这些系统?它主要只在嵌入式世界中有意义吗?
提前致谢!
twos-complement - 为什么补码中的位反转?
在为二进制补码添加 1 之前存储带补码的负数时,为什么除了符号之外的所有位都反转了?我想如果唯一不同的是标志,那就更简单了。我能想到的唯一原因是它以某种方式使计算机更容易。
c++ - -1 和 ~0 有什么区别
标题确实说明了一切:减一和tilda(补码)零有什么区别?
在讨论指定设置所有位的位掩码的最佳方法时,出现了这个问题。以下哪个更好?
或者
是否有任何其他用途,它会反过来吗?
更新:在stackoverflow.com/q/809227/34509上对此主题进行了类似的讨论 ,我在之前的研究中错过了这些讨论。感谢 Johannes Schaub 指出这一点。
binary - 将十六进制转换为二进制以及 16 位的一和二的补码
我正在尝试将 FFAD(十六进制)转换为十进制值,然后对其进行 1 和 2 的补码。FFAD 表示为一个 16 位整数。当我将 FFAD 转换为基数 2 时,我得到 1111111110101101。
我的问题是我怎么知道它是否是负数?
我有二进制文件,现在要正常进行补码,我会将最后一位从 0 更改为 1,然后翻转所有位,但作为 16 位整数,我没有更多可用位。由于第 16 位是 1,这是否意味着它是负数?我该怎么做呢?我只是对这个问题感到困惑,任何指针都将不胜感激。
compiler-warnings - 警告:'整数转换导致截断'
我在这里收到警告。警告说“整数转换导致截断”。即使我删除了类型转换(U16),它仍然存在。
如何解决此警告?我使用了下面的代码并删除了警告,但不确定它是否正确。
提前致谢!
complement - 如何计算正数和负数的补码?
如果我用一个补码来表示数字,我应该得到什么结果?
比如数字01110(一个正数),它的补码应该是01110还是10001?
如果数字为 10001(负数),则补码值为 01110?
bit-manipulation - 2's(N) = 1's(N-1)
有一个有趣的事实:
数字 N 的 2 的补码等于数字 N 的 1 的补码减去 1。
即
下面的结果是显而易见的。
如何在第二个结果的帮助下证明第一个结果?