2015-02-07 6 views
0

В C++ я пытаюсь использовать оператор modulo для двух неподписанных переменных int, например, в умножении Марсалья с алгоритмом переноса. Результаты кажутся правильными, но я не уверен в ограничениях по модулю.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

+3

Я не уверен, что вы не уверены в –

+0

Что такое «ограничения по модулю»? – harold

ответ

0

Ссылка: C++, 03 пункта 5.6 пункта 4

Двоичных/оператор дает частное, и бинарный оператор% дает остаток от деления первого выражения на второй. Если второй операнд/или% равен нулю, поведение не определено; в противном случае (a/b) * b + a% b равно a. Если оба операнда неотрицательны, то остаток неотрицателен; если нет, знак остатка определяется реализацией.

Я не вижу ограничений по модулю в c.

Смежные вопросы