Насколько я знаю, когда вы используете битовый оператор сдвига влево в C, гарантируется, что свободные биты будут заполнены нулями. Тем не менее, я читал, что смещение вправо зависит от реализации, то есть в некоторых машинах свободные биты будут заполнены нулями, в других - 1.
Я использую правый сдвиг в программе, и действительно моя машина заполняет свободные биты 1 с. Проблема в том, что мне нужно заполнить нулями вместо этого.
Есть ли способ заставить 0 использовать правильные сдвиги?
Одним из решений было бы, после применения правого сдвига, создать маску, подобную 011111111, а затем применить побитовое И, который изменит крайний левый 1, который был вставлен, на 0.
Но это громоздко и тратит время. Если бы был способ указать моей машине заполнять правильные смены 1с, это было бы намного проще.
Спасибо