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