我想知道一些应用循环移位的例子。例如,无符号整数的右移将导致除以二。相反,左移将导致乘以 2。二进制数的循环移位是否有任何著名/有趣的属性。
注意:关于右/左移位的示例是为了说明该特定运算符的应用。我要求循环移位运算符/函数的类似示例。
我想知道一些应用循环移位的例子。例如,无符号整数的右移将导致除以二。相反,左移将导致乘以 2。二进制数的循环移位是否有任何著名/有趣的属性。
注意:关于右/左移位的示例是为了说明该特定运算符的应用。我要求循环移位运算符/函数的类似示例。
出现循环变化的一个令人惊讶的地方是约瑟夫斯幸存者问题。在这个有点病态的问题中,n 个人围成一圈。第一个人杀死第二个人,然后第三个人杀死第四个人,以此类推。这个过程重复,一个人杀死下一个人,直到只剩下一个人。问题是给 n 个人,哪个人幸存下来?
令人惊讶的是,答案是通过对 n 进行右循环移位一位来给出的。Graham、Knuth 和 Patashnik 的《具体数学》一书很好地证明了这一点。
希望这可以帮助!
t = rand(); result = t XOR cshift(t,1)
.2 (mod (2^N - 1))
这个应用程序与Henrik 的回答中提到的乘法密切相关。常规左移是乘以 2 (mod 2^N),其中 N 是整数类型的位数。
循环左移是乘以 2 (mod (2^N - 1))。所以这在做算术 mod (2^N-1) 时会很方便。