2013-04-18 8 views
5

Posso essere sicuro che un numero dispari in C++ dovrebbe sempre restituire il minimo del risultato quando diviso in modo tale che ci sia un resto o ci siano eccezioni a questo? Intendo:Un numero dispari restituisce sempre il piano quando è diviso con un resto?

int x = 5; 
x = x/2; 
cout<<x;  //2 
+1

sì, sono sicuro. ma perché? lo standard ans lo dice in 5.6.4 –

+0

Vedo, grazie mille :) – Straightfw

+2

Se il numeratore è negativo, i risultati diventano nervosi. –

risposta

2

La divisione dei numeri interi viene gestita come un'operazione di fondo in C/C++.

Si ottiene 2 nell'esempio precedente poiché la risposta reale 2.5 non può essere rappresentata.

Some more verbose answers here

+0

Ottimo, grazie :) – Straightfw

+0

Non "in genere". Questo è obbligatorio. –

+0

@Guvante: Huh? Questo potrebbe anche essere dovuto al fatto che questa non è una domanda a C ....... –

5

sì. si può essere sicuri di quello in C++

ISO/IEC N3485 (bozza di lavoro) dice nel 5.6.4

The binary/operator yields the quotient, and the binary % operator yields 
the remainder from the division of the first expression by the second. 
    If the second operand of/or % is zero the behavior is undefined. 
For integral operands the/operator yields the algebraic quotient with any 
fractional part discarded;81 if the quotient a/b is representable in the type 
of the result, (a/b)*b + a%b is equal to a; otherwise, the behavior of both 
a/b and a%b is undefined. 
+1

Siamo passati da bozze di lavoro! C++ 11 esiste. –

+0

beh è gratis, questa bozza :-) –

+0

Questo perché non è uno standard di lingua. In questo caso, ovviamente, la numerazione e il testo sono gli stessi. –

2

Sì; divisione tra numeri interi è sempre divisione solidale in C++:

[C++11 5.6/4]: Il binario / operatore cede il quoziente e il % operatore binario produce il resto della divisione della prima espressione per il secondo. Se il secondo operando di / o % è zero, il comportamento non è definito. Per gli operandi integrali l'operatore / restituisce il quoziente algebrico con qualsiasi parte frazionata scartata; se il quoziente a/b è rappresentabile nel tipo del risultato, (a/b)*b + a%b è uguale a a.

Problemi correlati