2013-09-19 2 views
2

Мне нужно закодировать enum (eration), который будет конвертирован в ushort число и обратно. По какой-то причине мне нужно работать с битами (а не байтами).Как установить самый левый и самый правый бит ushort в C#

[Flags] 
public enum XFlags : ushort//word 
{ 
    None = 0, 
    Sequenced = "option enabled if LEFTmost bit is == 1", 
    Extra = "option enabled if RIGHTmost bit is == 1" 
}; 

Моя проблема в том, что я не знаю, как указать биты. Также мне действительно нужно использовать функцию [Flags], чтобы использовать несколько флагов для переменной флага. Поэтому использование обоих флагов должно дать мне (ushort) биты 1000000000000001?

Возможно ли это?

+0

Я думаю, вы не имеете в виду шестнадцатеричный '0x1000000000000001', но двойной' 1000000000000001'? это будет '0x8001' в шестнадцатеричном – olydis

+0

Да. Это была проблема, почему я не отказался от того, как появился 0x8000. Теперь ясно. Thx (sry) – Loryan55

ответ

3

Попробуйте (это в основном именно то, что вы выразили в своем коде, превращенный в ushort):

[Flags] 
public enum XFlags : ushort//word 
{ 
    None = 0, 
    Sequenced = 0x8000, 
    Extra = 0x0001 
} 

Объединяя теперь XFlags.Sequenced с XFlags.Extra вы в конечном итоге с ushort, имея крайний левый и крайний правый бит.

+0

Wow. Это то что мне нужно. Но я не понял, как 8000 стал первым. Спасибо в любом случае – Loryan55

+0

@ Loryan55 8 1000 в двоичном формате. – harold

+1

Добро пожаловать! '0x8000' - всего лишь шестнадцатеричный (думаю, вы можете немного прочитать о шестнадцатеричной системе) для двойного номера' 1000000000000000';) – olydis

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