带无符号整数的模

modulo with unsigned int

本文关键字:无符号整数      更新时间:2023-10-16

在C++中,我尝试对两个无符号int变量使用模运算符,就像在Marsaglia的带进位乘法算法中一样。结果似乎是对的,但我不确定模的局限性。

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;

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

二进制/运算符产生商,二进制%运算符产生第一个表达式除以第二个表达式的余数。如果第二个操作数/或%为零,则行为未定义;否则(a/b)*b+a%b等于a。如果两个操作数都是非负的,则余数是非负;如果不是,则余数的符号由实现定义。

我看不出c中模的任何限制。