Ваша идея в порядке.
Возможно, вы получаете странные выходные данные , потому что сдвиг битов работает не совсем так, как вы могли ожидать.
Ваши переменные имеют тип int
. Значит - они подписаны . Теперь, когда вы делаете битовое смещение на целое число со знаком, существуют дополнительные правила о том, как распространяется бит MSB. Проще говоря, когда целое число со знаком сдвигается вправо, MSB не обязательно равен нулю, он копируется из старого значения MSB.
Попробуйте заменить int
на unsigned int
.