2015-02-07 127 views
0

在C++中,我尝试对两个无符号整型变量使用模运算符,如Marsaglia乘以进位算法。 结果似乎正确,但我不确定模数的局限性。modulo with unsigned int

m_upperBits = (36969 * (m_upperBits & 65535) + (m_upperBits >> 16))<<16; 
m_lowerBits = 18000 * (m_lowerBits & 65535) + (m_lowerBits >> 16); 
unsigned int sum = m_upperBits + m_lowerBits; /* 32-bit result */ 
unsigned int mod = (max-min+1); 
int result=min+sum%mod; 
+1

'usigned int'不保证有正好32位。顺便说一句,有什么问题? – JohnB 2015-02-07 11:36:37

+3

我不确定你不确定 – 2015-02-07 11:36:39

+0

什么是“模数的限制”? – harold 2015-02-07 11:45:22

回答

0

参考:C++ 03第5.6段第4

二进制/操作员产生的商,和二进制%操作者产生了由第二所述第一表达的除法的余数。如果/或%的第二个操作数为零,则行为未定义;否则(a/b)* b + a%b等于a。如果两个操作数都是非负的,那么余数是非负的;如果不是,剩余的符号是实现定义的。

我没有看到任何c模的限制。

相关问题