Я должен быть абсолютно сумасшедшим здесь, но gcc 4.7.3
на моей машине дает самый абсурдный результат. Вот точный код, который я тестирую:
#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;
}
Теперь любое число, которое сдвинуто по собственному праву, должно привести к 0 (n/(2^n) == 0
с целым делением, n>1
и положительным/неподписанным), но каким-то образом это мой вывод:
100000
100000
100000
Я сошел с ума? Что может происходить?