2015-08-30 4 views
0

Я пытаюсь получить обратное, но что-то не так.побитовые логические операторы в java

String binary[]={ 
     "0000","0001","0010","0011","0100","0101", 
     "0110","0111","1000","1001","1010","1100", 
     "1101","1110","1111" 
    }; 
    int a=3; 
    int b=6; 
    int c=a|b; 
    int d=a&b; 
    int e=a^b; 
    int f=(~a &b) | (a&~b); 
    int g= ~a & 0x0f; 

    System.out.println(" a="+binary[a]); 
    System.out.println(" b="+binary[b]); 
    System.out.println(" a|b="+binary[c]); 
    System.out.println(" a&b="+binary[d]); 
    System.out.println(" a^b="+binary[e]); 
    System.out.println(" ~a&b|a&~b="+binary[f]); 
    System.out.println(" ~a="+binary[g]);** 

является Задачи и результаты:

a=0011 
b=0110 
a|b=0111 
a&b=0010 
a^b=0101 
~a&b|a&~b=0101 
~a=1101 

Последняя обратная wrong.a должна быть 1100.What я делаю неправильно?

+1

Надлежащий значение для 11 ('1011') отсутствует. – RealSkeptic

+0

Я понял это. Спасибо за помощь RealSkeptic. – hisiti

ответ

0

Вы двоичные строки не являются правильными, битовые сдвиги, это правильный массив двоичных строк:

String binary[]={ 
      "0000","0001","0010","0011","0100","0101", 
      "0110","0111","1000","1001","1010","1011", 
      "1100","1101","1110", "1111" 
    }; 

И с кодом этого является выход:

a=0011 
b=0110 
a|b=0111 
a&b=0010 
a^b=0101 
~a&b|a&~b=0101 
~a=1100 
1
String binary[]={ 
    "0000","0001","0010","0011", 
    "0100","0101","0110","0111", 
    "1000","1001","1010","1011", 
    "1100","1101","1110","1111" 
}; 

Элементарный: вы пропустили одно двоичное значение. Помощь в более очевидном шаблоне помогает.

+0

@Andreas Спасибо за то, что нашли цитату. – laune