не могу понять поведение этого битового сдвига:Странное поведение битового сдвига
int container = 1;
cout<<(container>>32)<<endl;
Если это логический сдвиг на выходе должен быть 0, но это 1 вместо этого, как если бы это был циклический сдвиг. Когда я смотрю на разборку, я вижу, что эта команда используется SAR. Пожалуйста, объясните мне это поведение.
http://stackoverflow.com/questions/18918256/is-right-shift-undefined-behavior-if-the-count-is-larger-than-the-width-of-the-t –
Ваш компилятор должен предупредили об этом. Вы попробовали опцию '-Wall'? – 5gon12eder
Visual Studio выдает предупреждение. В X86/X64 в 32-разрядных инструкциях сдвига операнда используются только нижние 5 бит подсчета, в этом случае: 32 & 0x1f == 0. Вы могли бы использовать контейнер >> = 31; контейнер >> = 1; и это будет работать (должно производиться 0 или -1 на X86/X64). – rcgldr