有人可以解释为什么 4 & 0xFFFF - 1 仍然是 4 吗?

Can someone please explain why 4 & 0xFFFF - 1 is still 4?

System.out.println(4 & 0xFFFF);
System.out.println(4 & 0xFFFF - 1);
int i = 4 & 0xFFFF;
System.out.println(i - 1);

这四行我都试过了。但是第一张和第二张打印出来的都是4,但是最后一张打印出来的是3,我实在想不通为什么……第二张打印出来不应该是3吗?

用()来明确你期望的运算顺序是什么:

    System.out.println( 4 & (0xFFFF - 1) );
    System.out.println( (4 & 0xFFFF) - 1 );

不带()的运算顺序为第一种情况;