C # Bit-Verschiebung: Dieses Verhalten ist in der Spezifikation, ein Fehler oder Zufall?

StackOverflow https://stackoverflow.com/questions/2326724

  •  22-09-2019
  •  | 
  •  

Frage

Ich arbeite mit Bitverschiebung Operatoren (meine Frage Bit Array Gleichheit ) und einem SO Benutzer einen Fehler in meiner Berechnung meiner Schicht wies darauf hin, Operanden - ich war für einen int eine Reihe von [1,32] anstelle von [0,31] zu berechnen. (Hurray für die Gemeinschaft SO!)

In der Behebung des Problems, ich war überrascht, das folgende Verhalten zu finden:

-1 << 32 == -1

In der Tat scheint es, dass n << s kompiliert wird (oder von der CLR interpretiert - ich habe nicht die IL überprüfen). Als n << s % bs(n) wo bs (n) = Größe in Bits von n

Ich würde erwarten:

-1 << 32 == 0

Es scheint, dass der Compiler erkennt, dass Sie über die Größe des Ziels verschieben und Ihre Fehler zu korrigieren.

Dies ist eine rein akademische Frage, aber weiß jemand, ob dies in der Spezifikation definiert ist (ich nichts unter

scroll top