2011-01-02 2 views
1

Это на самом деле довольно сложно для Google.Quick: Установить верхние 2 бита int

Как вы устанавливаете (побитовые или) верхние два бита 32-битного int?

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

ответ

6

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

integerVariable |= 3 << 30; 

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


Если это uint:

uintVar |= 3u << 30; 
+0

Мне это нравится. Версия в комментарии еще более понятна. Принято. – Flipster

+0

@FlipScript: Перемещенный комментарий к ответу. –

1
integerVariable |= 0xC0000000; 

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

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

Смежные вопросы