Двоичные литералы C # - PullRequest
       63

Двоичные литералы C #

163 голосов
/ 27 февраля 2009

Есть ли способ записи двоичных литералов в C #, например, префикс шестнадцатеричного с 0x? 0b не работает.

Если нет, то какой простой способ сделать это? Какое-то преобразование строк?

Ответы [ 12 ]

1 голос
/ 23 сентября 2010

Хотя решение для разбора строк является наиболее популярным, оно мне не нравится, потому что в некоторых ситуациях разбор строк может сильно ударить по производительности.

Когда требуется своего рода битовое поле или двоичная маска, я бы лучше написал это как

long bitMask = 1011001;

и позже

int bit5 = BitField.GetBit (bitMask, 5);

Или

bool flag5 = BitField.GetFlag (bitMask, 5); `

Где класс BitField

public static class BitField
{
    public static int GetBit(int bitField, int index)
    {
        return (bitField / (int)Math.Pow(10, index)) % 10;
    }

    public static bool GetFlag(int bitField, int index)
    {
        return GetBit(bitField, index) == 1;
    }
}
0 голосов
/ 09 апреля 2014

В принципе, я думаю, что ответ НЕТ, простого пути нет. Используйте десятичные или шестнадцатеричные константы - они просты и понятны. Ответ @RoyTinkers также хорош - используйте комментарий.

int someHexFlag = 0x010; // 000000010000
int someDecFlag = 8;     // 000000001000

Другие ответы здесь представляют несколько полезных рабочих раундов, но я думаю, что они не лучше, чем простой ответ. Разработчики языка C #, вероятно, сочли префикс «0b» ненужным. HEX легко преобразовать в двоичный код, и большинству программистов все равно придется знать DEC-эквиваленты 0-8.

Кроме того, при проверке значений в отладчике они будут отображаться как HEX или DEC.

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