2009-10-01 12 views

ответ

24

Это для взятия модуля.

В принципе, это целочисленное представление остатка.

Итак, если вы разделите на 2, вы оставите 0 или 1 в качестве остатка.

Это хороший способ прокрутки чисел, и если вы хотите, чтобы четные строки были одним цветом, а нечетные строки были другими, модуль 2 хорошо работает для произвольного количества строк.

9

Это значит остаток дивизии. В вашем случае разделите на 2, а остаток будет равен 0 или 1.

+0

Оставшихся может быть отрицательным. Стандарт C++ требует только равенства (a/b) * b + (a% b) = a в случае b! = 0 и позволяет целочисленное деление округлять до нуля (C++ 0x даже требует его) – sellibitze

+1

Хотя остаток может быть отрицательным, если дивиденд отрицательный (или делитель, но это здесь 2). Таким образом, в зависимости от того, что такое «код», это может не быть проблемой, и, надеюсь, программист подумал об этом при документировании использования макроса SHUFFLE_STATEMENT_2. –

6

Это означает, что по модулю. Обычно (x % 2) различает нечетные и четные числа.

4

Thats modulo. Он возвращает то, что осталось после деления:

10/3 даст 3. - 1 слева.

10% 3 дает это 1.

2

Модульное возвращает остаток, оставшееся после деления. Это полезно, когда вы поставлена ​​задача определения чет/нечет/простых чисел в качестве примера:

Вот пример использования его для поиска простых чисел:

int main(void) 

{ Int IsPrime = 1; int n;

cout << "Enter n: "; 
cin >> n; 

for (int i=1; i<=n; i++) 
{ 
    for (int j=2; j <= sqrt(static_cast<double>(i)); j++) 
    { 
     if(!(i%j)) 
     { 
      isPrime=0; 
      break; 
     } 

    } 

    if (isPrime) 
     cout << i << " is prime" << endl; 
    isPrime=1; 
} 
return 0; 

}

17

В случае кто-то случается, все равно:% действительно возвращает остаток, не модуль. Пока цифры положительны, нет никакой разницы.

Для отрицательных чисел может быть разница. Например, -3/2 может дать два возможных ответа: -1 с остатком -1 или -2 с остатком 1. По крайней мере, как это обычно используется в модульной арифметике, модуль всегда положителен, поэтому первый результат не соответствует модулю.

C89/90 и C++ 98/03 позволяют либо отвечать хотя до тех пор, пока/и% производят ответы, которые работают вместе, чтобы вы могли воспроизвести вход (т.е. -1x2 + -1 -> - 3, -2x2 + 1 = -3).

Для более новых версий стандартов (C99, C11 и C++ 11) выбора больше нет: целочисленное деление должно округлять до нуля. Например, -3/2 должно дать -1 с остатком - 1. -3/2, дающий -2 с остатком 1, больше не допускается.

+0

+1. На мой взгляд, это единственный удовлетворительный ответ. В стандарте упоминается условие (a/b) * b + (a% b) = a. Кроме того, C++ 0x добавит гарантию того, что целочисленное деление всегда округляется до нуля. Это составляет -3/2 = 1 и -3% 2 = -1. – sellibitze

+1

+1. И несколько раз я хотел взять модуль отрицательного числа, но это мгновенная гарантированная ошибка. Это реальный недостаток в C/C++: гарантированно скомпилирован без сбоев и может работать на одной платформе, но мгновенный (и таинственный) сбой при компиляции в другом месте. – Potatoswatter

0

Это остаток деления. Так как то, как 5, разделенного на 2 имеет остаток 1, потому что 2 входит в 5 2 раза, но это составляет только четыре, и вы получили, что немного больше на конце

5% 2 == 1

Примечание что цена деления не рассчитываются в любом месте, так что если вы хотите, и в целом общее целое значение деления и это остаток

int answer = 5/2; 
int remainder = 5 % 2; 
cout << "5 divided by 2 is " << answer << " with remainder " << remainder; 

«5 делится на 2, 2 с остатком 1»

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