Я получил этот макрос С++ и задаюсь вопросом, что они означают по коду% 2 (знак процента)?
#define SHUFFLE_STATEMENT_2(code, A, B)
switch (code%2)
{
case 0 : A; B; break;
case 1 : B; A; break;
}
Я получил этот макрос С++ и задаюсь вопросом, что они означают по коду% 2 (знак процента)?
#define SHUFFLE_STATEMENT_2(code, A, B)
switch (code%2)
{
case 0 : A; B; break;
case 1 : B; A; break;
}
Это для принятия модуля.
В принципе, это целочисленное представление остатка.
Итак, если вы разделите на 2, у вас будет 0 или 1 в качестве остатка.
Это хороший способ прокрутки чисел, и если вы хотите, чтобы четные строки были одним цветом, а нечетные строки были другими, модуль 2 хорошо работает для произвольного количества строк.
В случае, если кому-то случается волноваться:% действительно возвращает остаток, а не модуль. Пока цифры положительны, нет никакой разницы.
Для отрицательных чисел может быть разница. Например, -3/2 может дать два возможных ответа: -1 с остатком -1 или -2 с остатком 1. По крайней мере, как это обычно используется в модульной арифметике, модуль всегда положителен, поэтому первый результат не соответствует модулю.
C89/90 и С++ 98/03 позволяют либо отвечать хотя до тех пор, пока/и% производят ответы, которые работают вместе, чтобы вы могли воспроизвести ввод (т.е. -1x2 + -1 → - 3, -2x2 + 1 = -3).
Для более новых версий стандартов (C99, C11 и С++ 11) больше нет выбора: целочисленное деление должно округлять до нуля. Например, -3/2 должно давать -1 с остатком -1. -3/2, дающий -2 с остатком от 1, больше не допускается.
Это означает остаток от деления. В вашем случае разделите на 2, а остаток будет равен 0 или 1.
Это означает по модулю. Обычно (x % 2)
различает нечетные и четные числа.
Это по модулю. Он возвращает то, что осталось после деления:
10/3 даст 3. - 1.
10% 3 дает это 1.
Modulo возвращает остаток, оставшийся после деления. Это полезно, когда вам поручено определять четные/нечетные/простые числа в качестве примера:
Вот пример его использования для нахождения простых чисел:
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;
}
Это остальная часть деления. Так как, как 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"