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

В C # (3.5) я пытаюсь сделать следующее:

byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;

и получаю сообщение об ошибке 132: «Невозможно неявно преобразовать тип« int »в« байт ». Существует явное преобразование (вы пропускаетебросать?)".То же самое происходит с |и ^.

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

Ответы [ 2 ]

12 голосов
/ 18 июня 2009

Различные операторы не объявлены для byte - оба операнда повышаются до int, и в результате получается int. Например, дополнение:

byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 + byte2; // Compilation error

Обратите внимание, что составные назначения работают:

byte1 += byte2;

Был недавний вопрос SO по этому . Я согласен, что это особенно утомительно для побитовых операций, хотя результат всегда должен быть одинакового размера, и это логически полностью допустимая операция.

В качестве обходного пути вы можете просто привести результат обратно к байту:

byte byte3 = (byte) (byte1 & byte2);
0 голосов
/ 18 июня 2009

Поскольку байтовые (и короткие) типы не реализуют эти операторы

См. Спецификацию: 4.1.5

...