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

Предлагаю проверить книгу Элементы вычислительных систем . В процессе изучения книги вы создадите виртуальный компьютер, начиная с базовых логических элементов. К тому времени, как вы закончите с книгой, у вас будет рудиментарная операционная система, компилятор и т. Д.
Исходный код, который доступен онлайн, также реализует архитектуру компьютера поверх Java.

6
задан Simon 18 June 2009 в 09:20
поделиться

2 ответа

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

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

Обратите внимание, что составные присваивания действительно работают:

byte1 += byte2;

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

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

byte byte3 = (byte) (byte1 & byte2);
12
ответ дан 9 December 2019 в 20:47
поделиться

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

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

0
ответ дан 9 December 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: