2009-10-01 28 views

Respuesta

24

Es para tomar un módulo.

Básicamente, es una representación entera del resto.

Por lo tanto, si divide por 2, tendrá 0 o 1 como residuo.

Esta es una buena manera de recorrer los números y si desea que las filas pares sean de un color y las filas impares sean otra, el módulo 2 funciona bien para un número arbitrario de filas.

9

Significa el resto de una división. En su caso, divida por 2 y el resto será 0 o 1.

+0

el resto puede ser negativo El estándar C++ solo requiere la igualdad (a/b) * b + (a% b) = a en caso b! = 0 y permite que la división entera redondee hacia cero (C++ 0x incluso lo requiere) – sellibitze

+1

Aunque el resto solo puede ser negativo si el dividendo es negativo (o el divisor, pero eso es 2 aquí). Dependiendo de qué "código" es, eso podría no ser un problema, y ​​con suerte el programador ha pensado en eso al documentar cómo se usará la macro SHUFFLE_STATEMENT_2. –

6

Significa módulo. Por lo general, (x % 2) discrimina los números impares y pares.

4

Eso es el módulo. Devuelve lo que queda después de la división:

10/3 dará 3. - 1 queda.

10% 3 da a este 1.

2

Modulo devuelve el resto que queda después de la división. Es útil cuando se está encargado de determinar incluso/números impares/Prime como un ejemplo:

He aquí un ejemplo del uso de ella para encontrar números primos:

int main(void) 

{int esPrimo = 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

En caso de que alguien le sucede a cuidar:% realmente devuelve el resto, no el módulo. Siempre que los números sean positivos, no hay diferencia.

Sin embargo, para los números negativos puede haber una diferencia. Por ejemplo, -3/2 puede dar dos respuestas posibles: -1 con un resto de -1, o -2 con un resto de 1. Al menos como se usa normalmente en la aritmética modular, el módulo siempre es positivo, por lo que el primero el resultado no corresponde a un módulo.

C89/90 y C++ 98/03 permiten cualquier respuesta, siempre que/y% produzcan respuestas que funcionen juntas para que pueda reproducir la entrada (es decir, -1x2 + -1 -> - 3, -2x2 + 1 = -3).

Para las versiones más nuevas de las normas (C99, C11 y C++ 11) ya no hay ninguna opción: división entera debe ronda hacia 0. Por ejemplo -3/2 debe dar -1 con un resto de - 1. -3/2 dando -2 con un resto de 1 ya no está permitido.

+0

+1. En mi opinión, esta es la única respuesta satisfactoria. La norma menciona la ecuación (a/b) * b + (a% b) = a. Además, C++ 0x agregará la garantía de que la división entera siempre se redondea hacia cero. Eso hace -3/2 = 1 y -3% 2 = -1. – sellibitze

+1

+1. Y varias veces he querido tomar el módulo de un número negativo, pero es un error garantizado instantáneamente. Es un defecto real en C/C++: se garantiza que se compilará sin problemas, y podría funcionar en una plataforma, pero al instante (y misterioso) cuando se compila en otro lugar. – Potatoswatter

0

Es el resto de la división.Así como la forma 5 dividido por 2 tiene un resto de 1, porque entra en 2 5 2 veces, pero que sólo son cuatro, y que tiene ese pequeño extra en el extremo

5% 2 == 1

Nota ese valor división no se está calculando en cualquier lugar, así que si quería tanto todo el valor entero total de la división y es resto

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

"5 dividido por 2 es 2 con resto 1"

Cuestiones relacionadas