Почему я не могу использовать логическую логику для байтов?
-
06-07-2019 - |
Вопрос
В C # (3.5) я пробую следующее:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
и я получаю сообщение об ошибке 132: "Невозможно неявно преобразовать тип" int "в" byte ". Существует явное преобразование (вам не хватает приведения?) & Quot ;. То же самое происходит с | и ^.
Что я делаю не так? Почему он спрашивает меня о Ints? Почему я не могу использовать логическую логику для байтов?
Решение
Различные операторы не объявляются для байта
- оба операнда переводятся в int
, и в результате получается int
. Например, дополнение:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 + byte2; // Compilation error
Обратите внимание, что составные назначения работают:
byte1 += byte2;
Был недавний вопрос SO по этому вопросу . Я согласен, что это особенно утомительно для побитовых операций, хотя результат всегда должен быть одинакового размера, и это логически полностью допустимая операция.
В качестве обходного пути вы можете просто привести результат обратно к байту:
byte byte3 = (byte) (byte1 & byte2);
Другие советы
Потому что байтовые (и короткие) типы не реализуют эти операторы
См. Spec: 4.1.5