La specifica Java spiega la shift operators come segue:
Se il tipo promosso dell'operando di sinistra è int
, solo i cinque bit più basso di ordine del operando a destra sono utilizzati come il turno distanza. È come se l'operando di destra fosse soggetto a un operatore AND logico bit a bit &
(§15.22.1) con il valore di maschera 0x1f
. La distanza di spostamento effettivamente utilizzata è quindi sempre compresa tra 0 e 31.
Il valore di 32 & 0x1f
è zero.
Se l'operando di sinistra è long
, allora si ottiene un qualcosa in più per l'operando di destra, ampliando il limite massimo a 63 invece di 31.
Al fine di avere alcun valore atteso specifico spostamento - 1 a destra, è necessario specificare la rappresentazione binaria sottostante degli interi (ad esempio, il complemento a due) e il numero di bit (ad esempio, 32). Ogni linguaggio di programmazione può definirli in modo diverso, ma nell'interesse di mantenere le cose più semplici per l'implementazione, in genere specificano che lo spostamento di più del numero di bit disponibili non è consentito. Questo perché spesso anche l'hardware della CPU sottostante non lo supporta. Dopotutto, se vuoi spostare tanti bit, l'operando di sinistra non conta più poiché il risultato sarà sempre lo stesso.
fonte
2011-01-27 08:05:01
Sembra Java. Non conosco molte lingue che definiscono l'operatore ">>>". – leppie
Mi sono imbattuto in questo mentre stavo cercando di imparare le basi di Java, sì, ma non l'ho taggato così da quando pensavo che il bit shifting fosse un concetto abbastanza generico. Controllo – user183037
: http://stackoverflow.com/questions/3170412/why-is-132-1 –