Быстро: установить 2 верхних бита - PullRequest
1 голос
/ 02 января 2011

Это на самом деле довольно сложно для Google.

Как вы УСТАНАВЛИВАЕТЕ (побитовое или) старшие два бита 32-битного целого?

Я получаю предупреждения компилятора от всего, что я пытаюсь.

Ответы [ 2 ]

6 голосов
/ 02 января 2011

Попробуйте это:

integerVariable |= 3 << 30; 

Использование может быть более понятным (1 << 31) | (1 << 30) вместо (3 << 30), или вы можете добавить комментарий о поведении. В любом случае компилятор должен иметь возможность оптимизировать выражение до единого значения, которое равно <code>int.MinValue >> 1 == int.MinValue / 2.


Если это uint:

uintVar |= 3u << 30;
1 голос
/ 02 января 2011
integerVariable |= 0xC0000000; 

Используйте 0xC0000000u для целой переменной без знака.

Отображение всего 32-разрядного целого числа в шестнадцатеричной записи мне понятнее, чем сдвиги битов в ответе Мерадада. Они, вероятно, компилируются в одно и то же, поэтому используйте то, что вам кажется более понятным.

...