我有这个c ++宏,并想知道代码%2(百分号)是什么意思?
#define SHUFFLE_STATEMENT_2(code, A, B)
switch (code%2)
{
case 0 : A; B; break;
case 1 : B; A; break;
}
答案 0 :(得分:25)
用于取模数。
基本上,它是余数的整数表示。
因此,如果除以2,则余数为0或1。
这是循环数字的好方法,如果你想偶数行是一种颜色而奇数行是另一种颜色,模数2适用于任意数量的行。
答案 1 :(得分:18)
如果有人关心:%实际上返回余数,不模数。只要数字是正数,就没有区别。
对于负数,可能会有所不同。例如,-3 / 2可以给出两个可能的答案:-1,余数为-1,或-2,余数为1.至少,因为它通常用于模运算,模数总是正的,所以第一个结果与模数不对应。
C89 / 90和C ++ 98/03允许任何一个答案,只要/和%产生一起工作的答案,这样你就可以重现输入(即-1x2 + -1-> -3,-2x2 + 1 = -3)。
对于较新版本的标准(C99,C11和C ++ 11),不再有任何选择:整数除法必须向0舍入。例如-3/2 必须给-1剩余的-1。不再允许-3/2给-2,余数为1。
答案 2 :(得分:10)
这意味着分裂的其余部分。在你的情况下,除以2,其余的将是0或1。
答案 3 :(得分:6)
这意味着模数。通常(x % 2)
会区分奇数和偶数。
答案 4 :(得分:4)
这是模数。它返回除法后剩下的:
10/3将给出3. - 1。
10%3给出了这个1。
答案 5 :(得分: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;
}
答案 6 :(得分:0)
这是除法的剩余部分。 因此,如果5除以2的余数为1,因为2进入5 2次,但只等于4,并且你最后得到了一点额外的
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”