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

c - 使用格式说明符 %d 和 %u 将 ~0 类型转换为 (unsigned int) 和 (unsigned short) 对 short 产生相同的结果,但对 int 产生不同的结果

在计算有符号和无符号的 char、short、int 和 long 变量范围的过程中,我采用了以下解决方案:

  1. https://stackoverflow.com/a/19085193/11320006

  2. http://www.learntosolveit.com/cprogramming/Ex_2.1_cal_limits.html

根据解决方案 1,我希望在下面的代码中输出 -1 和 65535,假设它的行为与两个格式说明符的代码(unsigned short)~0相同。(unsigned int)~0

(unsigned short)~0为什么和的行为有所不同(unsigned int)~0

0 投票
2 回答
82 浏览

python - Python:使用 join 和 lambda 的补码

我正在尝试创建将数字转换为其 Ones 补码的管道,例如 (8)

1234 -> 7654

83743 -> 05145

我试图以这种风格创建一些东西,但我无法弄清楚如何正确构建管道。

错误

TypeError:“int”对象不可调用

0 投票
2 回答
471 浏览

assembly - Assembly-RiscV 中的“不”是什么意思?

not在 RiscV中是什么意思?我从 C 中翻译了一些代码后得到它,如下所示:

0 投票
3 回答
109 浏览

c - C 在内部使用哪个补码?

我查找的所有内容都只是告诉我如何在 C 中进行补码运算/计算。

我想知道 C 在内部使用什么表示以及它如何处理溢出。

0 投票
0 回答
30 浏览

binary - 如何对补数进行算术运算并纠正溢出?

对于一些背景故事,我正在制作一个可以对补数进行算术运算的程序。为此,我将二进制字符串转换为 BigInteger,然后使用所述 BigInteger 执行数学运算,然后将其转换回二进制字符串。唯一的问题发生在最终结果低于 -127 或高于 +127 时,因为由于补数的性质,我不知道如何纠正它。我希望我能以某种方式将它们转换为无符号数字,并像这个答案所说的那样做。

我还从阅读链接的问题中得到了一些其他问题。我把它们放在引号中。我只是想了解它们的含义,然后向我解释。

首先

我知道如果最高位有进位,r 基数的 r-1 补码应该在进位附近结束。

第二

结束进位实际上相当简单:它将加法运算的模数从 rn 更改为 rn-1。

最后

同样,让我们​​将进位位保持在原位。如果你把数字看成无符号整数,我们计算的是 13 + 11 = 24。但是,由于回绕进位,加法是模 15 完成的,所以我们最终得到 9,它代表 -6(正确的结果)。

如果有人可以向我解释这些引用并提供一些网页供我阅读,我将不胜感激!:)

0 投票
2 回答
88 浏览

go - uint(0) - uint(1) 输出 uint64 的 maxValue

谁能告诉我为什么输出不是-1而是18446744073709551615?

输出

目前,我的理解如下。

pc中的减法将转换为加法。b 是负数,所以 a(0) 和 b(-1) 的 2 的补码将被添加使用。

所以计算就像

通常,如果 a 和 b 是 int 类型,则 2 的补码将自动转换为二进制结果 (10000000 00000000 00000000 00000001),即 -1。但是a和b是单位的类型,所以不会转换成二进制,它会把11111111 11111111 11111111 11111111(2的补码)的结果当作正常的二进制结果输出。 ← 这个解释对吗?

我的理解是否遗漏了什么?

另一个问题是 11111111 11111111 11111111 11111111 应该是 pow(2,64) - 1 即 18446744073709552000

为什么我的输出只有 18446744073709551615?

0 投票
0 回答
57 浏览

binary - 二进制表示(有符号幅度,1 的补码,2 的补码)

我是二进制表示的新手,想澄清一些问题......

据我了解:

  • Signed Magnitude 的第一位代表符号(0 = 正,1 = 负)
  • 1 的补码基本上是 Signed Magnitude 的倒数(1 变为 0,0 变为 1)
  • 2 的补码只是从 1 的补码中加 1

我想澄清一下:

  • 1 的补码和 2 的补码仅适用于负符号幅度(以 1 开头)
  • 二进制对于正符号幅度、1 的补码和 2 的补码是相同的

请参阅所附图片。附言。干杯!

桌子

0 投票
0 回答
56 浏览

binary - 使用二进制系统表示数据的不同方式需要什么?

有许多方法可以使用二进制表示数据,如无符号、有符号幅度、1s/2s 补码、偏移 M、浮点、ASCII 和 Unicode。为什么我们需要这么多不同的方式?

0 投票
2 回答
58 浏览

computer-science - 带有正负十进制值的九的补码问题

“如果数字是正数,则数字的九的补码就是它自己。”

我在一本名为“计算机科学基础”的书上读到这个,它说+234的9的补码是+234。

同时,我在Youtube上找了一些教程,但是,它说999减234是+234的9的补码,我现在很困惑。

书:234 个 9 = 234

优酷:234 个 9 = 999-234=765

有人可以向我解释一下吗?

0 投票
0 回答
35 浏览

bit-manipulation - 使用其他按位运算表达按位否定(`NOT`,按位补码)?

我正在用一种有限的语言编写一个算法,我可以使用的位运算符是

  • AND&
  • OR|
  • XOR^
  • SRL:(<<左移)
  • SLL:(>>右移)

我意识到我需要能够取整数的按位补码,通常用~x其他语言表示。

我能以某种方式表达~x,只使用{&, |, ^, <<, >>}运算符吗?

我会尝试在语言的编译器中实现这个运算符,但这似乎是一项非常具有挑战性的任务。我宁愿做一些肮脏的黑客来表达NOT x没有~.