Как установить любой бит в коротком - PullRequest
1 голос
/ 28 апреля 2011

Если varShort в VB.NET - это Short, а varBit - это значение от 0 до 15, как я могу установить бит в varShort, идентифицируемый varBit, не нарушая другие биты в varShort?

Моя проблема, конечно, связана с самым старшим битом, битом 15. Поскольку varBit определяется во время выполнения, решение должно работать с любым битовым номером.

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

Установка шестнадцатого бита Short вызовет исключение переполнения, поскольку Short имеет тип со знаком . Есть ли у вас основания не использовать неподписанный аналог UShort ?

Редактировать

Если вы действительно хотите придерживаться Short, эта функция установит шестнадцатый бит:

Function setNthBit(ByVal number As Short, ByVal bit As Short) As Short
    Dim mask As UShort
    mask = 2 ^ bit
    If mask > Short.MaxValue Then
        Return (Short.MinValue + number) Or mask
    Else
        Return number Or mask
    End If
End Function
1 голос
/ 28 апреля 2011

Вы можете использовать операторы смещения битов, << </a> и >> , чтобы включить нужный бит (и поместить это значение в varValue), а затем побитовый илиvarShort и varValue

В содержится информация об этом вопросе об операторах битового сдвига в VB.NET

...