2015-03-06 2 views
6

Attualmente sto imparando per un esame C++. Una delle domande nell'esame pratica è:Perché lo spostamento di questo bit viene valutato in 51

Qual è l'output di questa dichiarazione.

cout <<(11>>1)<<1<<endl; 

Come la vedo io. 11 tiene l'equivalente binario

1011. 

Spostando questo numero binario con 1 bit verso destra, è:

0101 

Poi spostando CHE numero uno a fianco rende

1010 

Quale valuta a 10.

Tuttavia, eseguendo la stessa istruzione nel mio compilatore dice t il numero valuta a 51. Qualcuno può spiegarmelo?

+6

Hai provato 'cout <<((11>> 1) << 1) << endl;'? –

+4

Non è 51, è un 5 seguito da 1. – jpw

+1

Grazie per tutte le risposte a tutti! Trovo abbastanza deludente il fatto che le persone facciano un downvote a questa domanda. Volevo solo imparare –

risposta

13

Ciò è dovuto al sovraccarico dell'operatore.

cout <<(11>>1)<<1<<endl; 
// ^output operator 
//  ^right shift 
//   ^output operator 

Se si dovesse modificare il codice per questo, allora la vostra risposta sarebbe corretta:

cout << ((11>>1) << 1) <<endl; 
// brackets force left shift operator instead of output 
4
int a = (11>>1); 
int b = 1; 
cout << a << b; 

Cancella?

+0

Votato per il sarcasmo! – CinCout

6

cout << (11>>1) << 1 << endl;

diventa

cout << 5 << 1 <<endl;

Il significato di streaming di << ha la precedenza sul significato spostamento. Quindi stampa un 5 seguito da 1.

+0

"Il significato di streaming di' << 'ha la precedenza sul significato del cambiamento." In realtà è il risultato di [l'associatività sintattica di 'operator <<'] (http://en.cppreference.com/w/cpp/language/operator_precedence). Se cambi 'cout' in un oggetto numerico, ti ritroverai comunque con qualcosa come' 7 << (11>> 1) << 1 == (7 << (11>> 1)) << 1; ' –