Сдвиг битов в C - PullRequest
       2

Сдвиг битов в C

1 голос
/ 02 февраля 2011

Как бы я сделал следующее:

unsigned short x = 0xFFFF;
unsigned short y = 0xAE;

x |= y & 1;
x |= y & (1 << 1);
x |= y & (1 << 2);
x |= y & (1 << 3);
x |= y & (1 << 4);
x |= y & (1 << 5);
x |= y & (1 << 6);
x |= y & (1 << 7);
x |= y & (1 << 8);
x |= y & (1 << 9);
x |= y & (1 << 10);
x |= y & (1 << 11);
x |= y & (1 << 12);
x |= y & (1 << 13);
x |= y & (1 << 14);
x |= y & (1 << 15);
printf("%x", x); 

Я хочу, чтобы значение x было равно 0xAE, но оно все равно равно 0xFFFF.

Ответы [ 4 ]

3 голосов
/ 02 февраля 2011

Нет необходимости обращаться к каждому биту отдельно.Весь метод может быть просто уменьшен до

x &= y;
3 голосов
/ 02 февраля 2011

Все биты уже установлены в x - поэтому любая операция |= не изменит этого.

1 голос
/ 02 февраля 2011

Я думаю, вы хотели начать с

unsigned short x = 0x0000;
0 голосов
/ 02 февраля 2011

C вычисляет правильную вещь, так как то, что вы здесь делаете, берет y, и ANDING его с каждым битом от 0 до 15, который производит AE.Тем не менее, тогда вы делаете OxFF |oxAE, который является oxFF.Попробуйте установить оператор присвоения на &=.Это будет 0xFF & 0xAE, что 0xAE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...