Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Вопрос о битах подкачки

Автор вопроса: dato datuashviliОтветов: 3

у меня есть вопрос по этой теме, я думаю, что ответ неверный.

Поменять местами биты числа в C

1110 1011 это равно 235, но я получаю 3051 почему?

  • Вы используете 8-битный беззнаковый символ? Вы не должны этого делать, поскольку в качестве ответа вы получаете 3051. Как упоминалось в комментарии, код будет работать только с 8-битным типом данных. Pace 29.06.2010

cbit-manipulation

Ответы

Ответ 1 · рейтинг 2 · Guffa

Десятичное значение 3051 равно 101111101011 в двоичном. Если вы разделите его на четыре битных сегмента следующим образом: 1011 1110 1011, вы увидите, что четыре младших бита повторяются над восемью битами, которые вы хотите. Причина в том, что вы не замаскировали значение, которое должно быть верхними четырьмя битами.

Итак, вместо чего-то вроде этого:

(c >> 4) | ((c & 0x0f) << 4)

или что-то вроде этого:

((c >> 4) | (c << 4)) & 0xff

у вас просто есть это:

(c >> 4) | (c << 4)

Ответ 2 · рейтинг 1 · Mark Rushakoff

Скорее всего, у вас действительно правильный номер, но вы используете %d для его печати без преобразования в int (или что-то еще забавное в том, как вы его отображаете).

Я говорю это потому, что (3051 & 235) == 235, что вряд ли случайно произойдет.

Ответ 3 · Jerry Coffin

Вы показали только 8 бит, что означает максимально возможное значение 2 8 -1, что соответствует 255.

3051 в двоичном формате: 1011 1110 1011, поэтому, чтобы получить это, вы, по-видимому, продублировали наименее значимый ниббл в третий ниббл.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы