Для чего используется конструкция unchecked(((int)0xffffffff))

134
20 сентября 2019, 23:00

нашел в исходнике BitArray такую запись:

/*=========================================================================
        ** Sets all the bit values to value.
  =========================================================================*/
public void SetAll(bool value) {
     int fillValue = value ? unchecked(((int)0xffffffff)) : 0;
     int ints = GetArrayLength(m_length, BitsPerInt32);
     for (int i = 0; i < ints; i++) {
          m_array[i] = fillValue;
     }
     _version++;
}

0xffffffff это -1, тогда почему оно заменяет 1(true) и почему бы просто не поставить 1?

Answer 1

Для читаемости, как бы это не казалось странным.

Задача этого кода: создать массив int в котором каждый бит заполнен заданным значением. Если передано значение true, то каждый элемент массива должен получить двоичное значение 1111111111111111111111111111111111111111 — 32 единицы, или 0xFFFFFFFF в шестнадцатеричном формате.

Соответственно, т.к. в коде написано 0xffffffff, то сразу понятно, что заполняются 4 байта единиц. Если бы было написано -1, то результат был бы тот же, но при чтении кода возник бы вопрос: почему используется именно минус единица и как она связана с заполнением битов.

Манипуляции с unchecked и приведением типа вызваны тем, что значение 16-ричного литерала выходит за допустимые пределы int, и без них код не удалось бы скомпилировать.

почему бы просто не поставить 1?

1 это другое значение, в котором не все биты заполнены.

READ ALSO
Ошибка с MemoryMappedFile (NotSupportedException) .net core при использовании под linux?

Ошибка с MemoryMappedFile (NotSupportedException) .net core при использовании под linux?

Доброе времени сутокВозникла необходимость делиться информацией между двумя приложениями

102
Статическая библитека на C#

Статическая библитека на C#

Потребовалось мне создать службу Windows и десктопное приложениеОбе этих программы, в идеале, должны работать с одной и той же коллекцией пользовательского...

113
Как запретить игроку отклоняться от оси x и y? Чтобы он ходил ровно по оси x и y

Как запретить игроку отклоняться от оси x и y? Чтобы он ходил ровно по оси x и y

Как запретить игроку отклонять от оси x и y? Чтобы он ходил ровно по оси x и y

115
combobox search

combobox search

Интересует вопрос как в combobox реализовать поиск не по первой букве/цифре/символу, а по вхождению в строку?

134