Как избежать знака расширения битовой маски в Java? - PullRequest
2 голосов
/ 08 августа 2011

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

Ответы [ 2 ]

5 голосов
/ 08 августа 2011

Если вы не хотите, чтобы байт подписывал расширение, когда вы используете его в арифметических (или побитовых) операторах, вам нужно явно побитовое - и это с 0xFF.Это выглядит немного некрасиво, но неизбежно, если у вас есть byte (и, надеюсь, приличный JIT сможет распознать идиому и в любом случае сделать из нее эффективный код).

1 голос
/ 08 августа 2011

Есть ли у вас правый сдвиг в вашем коде? Вы используете '>>' вместо '>>>'? Есть твоя проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...