- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我有一个系统,其中的整数在 mod n
中工作。所以我的整数加一到 n-1
实际上等于零。
进一步假设您将一个数的二进制补码定义为与自身相加等于零的数。即:
x + C(x) = 0 (here C(x) is the twos compliment of x)
通常我应该怎么做才能得到 x 的补码?
真正的问题:
如果 x 是一个二进制数,我可以将 x 的所有位取反,然后对该数加一。
如果 x 是一个三进制数,这会变得有点棘手。这个问题是它不匹配偶数位,所以你会尝试翻转 2/3 的位或其他东西,我不知道这在物理上意味着什么。
所以我的问题是:我怎样才能对多个任意基数取二补?
最佳答案
我假设您正在为一些整数 s > 0
处理基础 s
并且您正在尝试以 s^(n+ 1)
对于一些固定整数 n > 0
。换句话说,最多使用 n+1
个位置(或数字)。
因此,您将此系统中的整数表示为序列 [xn ... x0]
,其中每个 xi
都是 0
和s-1
。例如,如果 s=3
和 n=4
,表示 [01201]
将对应于十进制数 0*3 ^4 + 1*3^3 + 2*3^2 + 0*3^1 + 1*3^0 = 27 + 18 + 1 = 46
。
一般来说,上述表示的十进制值为:
x = xn*s^n + ... + x0*s^0
现在,您的问题在于找到 -x
模 s^(n+1)
的表示(记住我们只能使用 s+1
“数字”。
定义,对于每个数字xi
,它对s
的补是
c(xi) = s - 1 - xi
请注意,在二进制情况下,当s=2
时,2
的补码符合相同的定义。还要注意
xi + c(xi) = s - 1 eq(1)
现在让我在这里使用一个更简单的符号并调用 yi = c(xi)
。然后顺序
y = [yn ... y0]
是我们可以称之为对 x
的 s
的补充。它也是 -x - 1
模 s^(n+1)
的表示,因此要获得 -x
您只需添加1
到 y
。例如,在 x=[01201]
的情况下,我们将得到 y=[21021]
,因为每个数字的总和为 3-1=2
位置。
原因很简单:
[yn ... y0] + [xn ... x0]
= yn*s^n + ... + y0*s^0 + xn*s^n + ... + x0*s^n
= (yn+xn)*s^n + ... + (y0+x0)*s^0
= (s-1)*sˆn + ... + (s-1)*s^0 ; by eq(2)
= s^(n+1) + ... + sˆ1 - (s^n + ... + s^0)
= s^(n+1) - 1
= -1 modulo s^(n+1)
因此,事情的工作方式与 s=2
和模 2^32
(32 位)时的工作方式类似。从这个意义上说,二进制情况没有什么特别之处。
关于algorithm - 2s补码一般形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39681019/
这个问题在这里已经有了答案: Why don't Java's +=, -=, *=, /= compound assignment operators require casting? (11 个
我搜索了很多,但没有一个链接能帮助我解决这个问题。我得到了 ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s
我正在做 RegexOne 正则表达式教程,它有一个 question关于编写正则表达式以删除不必要的空格。 教程中提供的解决方案是 We can just skip all the starting
([\s\S]+|\s?) 中 |\s? 的目的或作用是什么?如果没有它,表达式会不会与 ([\s\S]+) 相同? 最佳答案 这不是完全相同的。 ([\s\S]+|\s?) 会匹配空字符串,而 ([
这个正则表达式有一组还是两组? 我正在尝试使用第二组访问 bookTitle 但出现错误: Pattern pattern = Pattern.compile("^\\s*(.*?)\\s+-\\s+
在 C 中给定一个字符串指针 s,下面的迭代会做什么?即它以什么方式遍历字符串? for (++s ; *s; ++s); 最佳答案 for (++s ; *s;++s) 表示 将指针 s 递增到字符
我正在用一个 node.js 应用程序解析一个大列表并有这段代码 sizeCode = dbfr.CN_DESC.split('\s+-\s*|\s*-\s+') 这似乎不起作用,因为它返回了 [ '
我正在编写一个简单的字符串连接程序。 该程序按照我发布的方式运行。但是,我首先使用以下代码编写它来查找字符串的结尾: while (*s++) ; 但是,这个方法并没有奏效。我传递给它的字符串
这个问题已经有答案了: What does (?和aramchand来自Mohandas Karamchand G 因此,在使用这些匹配来分割字符串后,您最终会得到 {"M", "K", "G"} 注
我正在尝试转换 Map到 List使用 lambda。 本质上,我想将键和值与 '=' 连接起来之间。这看起来微不足道,但我找不到如何去做。 例如 Map map = new HashMap<>();
我正在经历 K & R,并且在递增指针时遇到困难。练习 5.3(第 107 页)要求您使用指针编写一个 strcat 函数。 在伪代码中,该函数执行以下操作: 将 2 个字符串作为输入。 找到字符串
在下面的代码中,pS 和 s.pS 在最后一行是否保证相等?也就是说,在语句S s = S();中,是否可以确定不会构造一个临时的S? #include using namespace std; s
演示示例代码: public void ReverseString(char[] s) { for(int i = 0, j = s.Length-1; i < j; i++, j--){
我一直在寻找类似于 .NET examples 中的示例的 PowerShell 脚本.取一个 New-TimeSpan 并显示为 1 天 2 小时 3 分钟 4 秒。排除其零的地方,在需要的地方添加
def func(s): s = s + " is corrected" return s string_list = ["She", "He"] for s in string_li
我是 python 的新手。当我在互联网上搜索 lambda 时。我在 lambda_functions 中找到了这个声明. processFunc = collapse and (lambda s:
我最近开始学习正则表达式,并试图为上面的问题写一个正则表达式。如果限制只放在一个字母上(例如不超过 2 个“b”),这并不困难。 那么答案就是:a* c*(b|ε)a* c*(b|ε)a* c* 但是
当我运行 npm install 时出现以下错误,但我无法修复它。 我试过:npm install -g windows-build-tools 也没有修复这个错误 ERR! configure
有很多有趣的haskell网上可以找到片段。 This post可以在 this (awesome) Stack Overflow question 下找到. The author写道: discou
我知道以下三行代码旨在将字符串提取到$ value中并将其存储在$ header中。但是我不知道$value =~ s/^\s+//;和$value =~ s/\s+$//;之间有什么区别。 $val
我是一名优秀的程序员,十分优秀!