我试图找出使用按位,加法和/或减法运算符的以下等式的等效表达式。我知道有一个答案(它进一步推广到任何模2^a-1,其中a是2的幂),但由于某种原因,我似乎无法弄清楚这种关系是什么。等效表达式
初始表达式:
x = n % (2^32-1);
c = (int)n/(2^32-1); // ints are 32-bit, but x, c, and n may have a greater number of bits
我对所述第一表达过程是采取的2^32的模,然后尝试弥补两个模的之间的差异。我在第二部分遇到麻烦。
x = n & 0xFFFFFFFF + difference // how do I calculate difference?
我知道区别n%(2^32)-n%(2^32-1)
是周期性(周期为2^32*(2^32-1)
),并有一个“秒杀达”开始在2^32-1
倍数和2^32
结束后各2^32
多,差异阴谋减少1(希望我的描述意义)
同样,第二表达可以以类似的方式来计算:
c = n >> 32 + makeup // how do I calculate makeup?
我想化妆在2^32-1
(并以2^32
的倍数减少1)处稳步增加1,尽管我在用可用的操作员方面表达了这个想法。