Arithmetische Rechtsverschiebung ergibt falsches Ergebnis?

Ich muss hier absolut verrückt sein, abergcc 4.7.3 auf meiner Maschine gibt das absurdeste Ergebnis. Hier ist der genaue Code, den ich teste:

#include <iostream>

using namespace std;

int main(){
  unsigned int b = 100000;
  cout << (b>>b) << endl;
  b = b >> b;
  cout << b << endl;
  b >>= b;
  cout << b << endl;
  return 0;
}

Nun sollte jede Zahl, die von selbst nach rechts verschoben ist, dazu führen0 (n/(2^n) == 0 mitganzzahlige Division, n>1, undpositiv / unsigniert), aber irgendwie ist hier meine Ausgabe:

100000
100000
100000

Bin ich verrückt? Was könnte möglicherweise los sein?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage