2014-11-07 11 views
5

Sto cercando di utilizzare l'operatore << su un long, in questo modo:operatore << non può essere applicato a operandi di tipo lunghe e lunghe

((long) num3) << (2 + (long) num4))) 

Questo mi dà il seguente errore:

Operator << cannot be applied to operands of type long and long.

Se non si invia num4 a long, non si verifica alcun errore. Tuttavia, non riesco a tenerlo come int. C'è un altro modo per aggirare questo?

+2

Vuoi veramente '<<', e non '<'? – Tim

+0

Perché stai lanciando a 'long' nell'operatore comunque? Fai il bit-shift e metti il ​​risultato a 'long'. Problema risolto. – BradleyDotNET

+3

Non ha senso spostare un lungo di oltre 64 bit, quindi l'operatore della mano destra non ha bisogno di essere lungo. – vcsjones

risposta

12

L'operando destro deve essere un int, non uno long. Non avrebbe senso usare long come numero di bit da spostare, poiché i tipi interi in C# non hanno mai più di 64 bit.

+5

Uh, perché i downvotes? Ho detto qualcosa di sbagliato? Si prega di commentare quando si scende, in modo che io sappia cosa c'è che non va ... –

+1

Questo è corretto, non so perché qualcuno lo ha downvoted. La specifica C# lo dice fondamentalmente in 7.9. "il tipo del secondo operando deve essere sempre int". con l'assunzione dinamica non viene utilizzata. – vcsjones

+0

Non ho votato per niente ... ma immagino che a qualcuno potrebbe non piacere questa risposta, è una risposta senza sapere perché la persona che ha fatto la domanda ha detto "Non posso mantenerla come int". Quindi la risposta ha minori possibilità di essere la risposta "appropriata" alla domanda originale .. anche se correttamente afferma i fatti. Solo la mia teoria .. Non mi piace neanche, quando tutto è giù votato senza commenti ... quindi sto condividendo una prospettiva che mi viene in mente. –

Problemi correlati