если байт оператора против целого числа - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь понять фрагмент кода ниже (отрывок), касающийся демонстрации побитовых операторов, в частности оператора if ((if ((b & t)...)

Переменная b имеет тип байта иt инт.Я не могу определить, как тестируются два разных типа переменных, чтобы они не равнялись 0 в цикле.Программа просто переворачивает биты.Однако я не могу обойти эту проблему.В Eclipse работает нормально.Есть идеи?

class NotDemo {
    public static void main(String args []) {
        byte b = -34; 
        for (int t=128; t > 0; t = t/2 ) {
            if((b & t) != 0) System.out.print("1 ");
            else System.out.print("0 ");

1 Ответ

0 голосов
/ 19 декабря 2018

b & t выполняет побитовое И на двух int с.byte b повышается до int.

. Он печатает биты двоичного представления -34.

. Двоичное представление -34 равно 11011110.

t получает значения 128,64,32,16,8,4,2,1, которые в двоичном виде равны

10000000
01000000
00100000
00010000
00001000
00000100
00000010
00000001

При побитовом И эти значения t с b вы получите результат, отличный от 0, только когда t и b имеют бит '1' в одной и той же позиции.

10000000 & 11011110 = 10000000 -> 1 printed
01000000 & 11011110 = 01000000 -> 1 printed
00100000 & 11011110 = 00000000 -> 0 printed
00010000 & 11011110 = 00010000 -> 1 printed
00001000 & 11011110 = 00001000 -> 1 printed
00000100 & 11011110 = 00000100 -> 1 printed
00000010 & 11011110 = 00000010 -> 1 printed
00000001 & 11011110 = 00000000 -> 0 printed

РЕДАКТИРОВАТЬ: это объяснение не совсем точно,Битовое И выполняется для двух int с (то есть двух 32-битных чисел), но, поскольку старшие 24 бита t равны 0, они не влияют на результат.

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