有人可以向我解释这个按位计划吗?

时间:2016-03-15 22:20:52

标签: java eclipse binary bitwise-operators

public class UpCase {
    public static void main(String[] args) {
        int t;
        byte val;
        val = 123;
        for (t = 128; t > 0; t = t / 2) {
            System.out.println(t);
            if ((val & t) != 0) System.out.println(" 1");
            else System.out.println(" 0");
        }
    }
}

特别是,我不确定为什么我们使用val=123?据我所知,这个程序将以二进制打印123,但为什么会这样呢?这是如何运作的?但我确实理解&运算符的原理以及如何打开和关闭位,但我不确定它在这个特定的例子中是如何工作的?

2 个答案:

答案 0 :(得分:2)

该程序将val中的数字的二进制数字从MSB打印到LSB,方法是将它与每个2的幂相比较:

123 : 01111011 &
128 : 10000000 = 
      00000000 

      00000000 != 0 => false, print 0

123 : 01111011 &
 64 : 01000000 = 
      01000000 

      01000000 != 0 =>  true, print 1

123 : 01111011 &
 32 : 00100000 = 
      00100000 

      00100000 != 0 =>  true, print 1

// repeat for 2^4-2^1... 

123 : 01111011 &
  1 : 00000001 = 
      00000001 

      00000001 != 0 =>  true, print 1

答案 1 :(得分:0)

很简单:

它只是使用按位运算符&来检查值(在这种情况下为123)。结果是1或0,对于以下值0.5t等重复此过程直到t = 0,从而得到该值为123的二进制字符串。