整个表达式的运算顺序是:先对a取反,再对b和c取与,最后对前两部分取或,楼主可以运行下面的代码,然后手动计算一下结果:public class IntgerTest { public static void main(String[] args) {
int a=-67,b=116,c=78; 
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(~a));
System.out.println(Integer.toBinaryString(b));
System.out.println(Integer.toBinaryString(c));
int d = ~a | b&c; 
System.out.println(d); }}11111111111111111111111110111101
1000010
1110100
1001110
70

解决方案 »

  1.   

    首先对~a操作,将-67转化为二进制,操作过程是将67转化成二进制数然后-1取反得到a,再对a的二进制数取反
    然后再进行|和&的操作,最后得到1000110,为70
      

  2.   

    package topics_390902424;public class IntgerTest {
        public static void main(String[] args) {
            int a = -67;
            int b = 116;
            int c = 78;
            int d = ~a | b & c;
            System.out.println(" a="
                    + String.format("%32s", Integer.toBinaryString(a)));
            System.out.println("---");
            System.out.println("~a="
                    + String.format("%32s", Integer.toBinaryString(~a)));
            System.out.println(" b="
                    + String.format("%32s", Integer.toBinaryString(b)));
            System.out.println(" c="
                    + String.format("%32s", Integer.toBinaryString(c)));
            System.out.println("---");
            System.out.println(" d="
                    + String.format("%32s", Integer.toBinaryString(d)));
            System.out.println("---");
            System.out.println(" d=" + d);
        }
    }
     a=11111111111111111111111110111101
    ---
    ~a=                         1000010
     b=                         1110100
     c=                         1001110
    ---
     d=                         1000110
    ---
     d=70