Почему я не могу использовать логическую логику для байтов?

StackOverflow https://stackoverflow.com/questions/1011682

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top