2012-09-24 23 views
5

Qual è l'ordine di valutazione in C nel caso di x<<y>>z? È (x<<y)>>z, a causa dell'associatività da sinistra a destra?x <<y>> z ordine di valutazione in C

EDIT bisogno di sapere quali sono le norme dicono su di esso, e non indovinare che cosa sta succedendo mediante ispezione per un particolare compilatore.

+6

Avete provato? Quello che hai? –

+0

@AurelioDeRosa: Provato qui: http://msdn.microsoft.com/en-us/library/2bxt6kc4.aspx. Ma ero confuso con la linea: "Ordine delle operazioni non è definito dal linguaggio" – phoxis

+4

@AurelioDeRosa: Anche se lo provate, come fai a sapere/dimostrare che il vostro compilatore è standard compliant? –

risposta

3

Online C 2011 Draft Standard (N1570)

 
6.5.7 Bitwise shift operators 

Syntax 

1  shift-expression: 
      additive-expression 
      shift-expression << additive-expression 
      shift-expression >> additive-expression 

La sintassi indica entrambi gli operatori sono lasciati-associativo, come segue:

 
    x  <<  y   >>   z 
    |    |   |   | 
    +------ + ------+   |   | 
      |     |   | 
      V     |   V 
     shift-expression  >> additive-expression 

+1

+1 per BNF . –

5

Sì, >> e << sono lasciati associativa e dello stesso la precedenza, in modo da x <<y>> z è equivalente a (x << y) >> z.

-1

Sì lo è, ma penso che sia più sicuro di fare in 2 fasi, come x<<y quindi y>>z causano il compilatore in grado di interpretare male un x<<y>>z. Non ho usato operazioni bit a bit da un tempo intero, ma se ricordo bene è quello che ho detto. Spero di averti aiutato.

+0

Grazie per il montaggio, non ho visto i miei errori. Ci scusiamo per l'OP. –

+0

il compilatore non può interpretarlo male (vicino a 0 possibilità di un bug, ordine di valutazione è un fatto fondamentale) –

+0

ho visto questo errore troppo (non so cosa ha attraversato il mio cervello) –

Problemi correlati