2009-10-01 78 views

risposta

24

È per prendere un modulo.

Fondamentalmente, è una rappresentazione intera del resto.

Quindi, se dividi per 2 avrai 0 o 1 come resto.

Questo è un buon modo per scorrere i numeri e se si desidera che le righe pari siano un colore e le righe dispari siano un altro, il modulo 2 funziona bene per un numero arbitrario di righe.

9

Significa il resto di una divisione. Nel tuo caso, dividi per 2 e il resto sarà 0 o 1.

+0

il resto può essere negativo Lo standard C++ richiede solo l'uguaglianza (a/b) * b + (a% b) = a nel caso b! = 0 e consente alla divisione intera di arrotondare verso zero (C++ 0x lo richiede anche) – sellibitze

+1

Anche se il resto può solo essere negativo se il dividendo è negativo (o il divisore, ma qui è 2). Quindi, a seconda del "codice", questo potrebbe non essere un problema, e si spera che il programmatore abbia pensato a questo quando si documenta come utilizzare la macro SHUFFLE_STATEMENT_2. –

6

Significa modulo. Solitamente lo (x % 2) discrimina numeri dispari e pari.

4

Questo è il modulo. Restituisce ciò che è rimasto dopo la divisione:

10/3 darà 3. - 1 è rimasto.

10% 3 fornisce questo 1.

2

Modulo restituisce il resto lasciato dopo la divisione. E 'utile quando si è incaricato di verificare pari/dispari/Prime come un esempio:

Ecco un esempio di utilizzo di esso per trovare i numeri primi:

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

Nel caso in cui qualcuno dovesse preoccuparsi:% ritorna davvero il resto, non il modulo. Finché i numeri sono positivi, non c'è differenza.

Per i numeri negativi, tuttavia, può esserci una differenza. Per esempio, -3/2 può dare due possibili risposte: -1 con un resto di -1, o -2 con un resto di 1. Almeno come è normalmente usato nell'aritmetica modulare, il modulo è sempre positivo, quindi il primo il risultato non corrisponde a un modulo.

C89/90 e C++ 98/03 consentono entrambe le risposte, purché/e% producano risposte che lavorino insieme in modo da poter riprodurre l'input (cioè -1x2 + -1 -> - 3, -2x2 + 1 = -3).

versioni più recenti delle norme (C99, C11 e C++ 11) non c'è più alcuna scelta: divisione intera deve rotondo verso 0. Ad esempio -3/2 deve dare -1 con resto di - 1. -3/2 dare -2 con un resto di 1 non è più consentito.

+0

+1. Secondo me questa è l'unica risposta soddisfacente. Lo standard menziona l'equlity (a/b) * b + (a% b) = a. Inoltre, C++ 0x aggiungerà la garanzia che la divisione intera sempre arrotonda verso zero. Ciò rende -3/2 = 1 e -3% 2 = -1. – sellibitze

+1

+1. E più volte ho voluto prendere il modulo di un numero negativo, ma è un bug garantito istantaneamente. È un vero difetto in C/C++: garantito per la compilazione senza intoppi, e potrebbe funzionare su una piattaforma, ma un arresto istantaneo (e misterioso) quando compilato altrove. – Potatoswatter

0

È il resto della divisione. Così come come 5 diviso 2 ha un resto di 1, perché 2 va in 5 2 volte, ma che è uguale solo quattro, e hai ottenuto quel qualcosa in più sulla fine

5% 2 == 1

Nota tale valore divisione non viene calcolato ovunque, quindi se si voleva sia l'intera valore intero totale della divisione ed è resto

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

"5 diviso 2 è 2 con resto 1"

Problemi correlati