int value = 1000000;
        byte b = (byte)(value & 0x000000ff);
        byte b8 = (byte) ( (value & 0x0000ff00) >> 8);
        byte b16 = (byte) ( (value & 0x00ff0000) >> 16);
        byte b24 = (byte) ( (value & 0xff000000) >> 24);
        System.out.println(b);
        System.out.println(b8);
        System.out.println(b16);
        System.out.println(b24);有哪个高手能帮我详细解释一下上面的程序呢???

解决方案 »

  1.   

    这些是位运算符,&就是and,>>是右移位,
      

  2.   

    (byte) ( (value & 0x0000ff00) >> 8);  value and 000000000000000011111111000000000 后右移8位后取后8位给b8  后面都一样
      

  3.   

    &,按位与,
    >>,右移运算。
      

  4.   

    很容易的呀
    帮你分析一下:
    int value = 1000000;
    byte b = (byte)(value & 0x000000ff);
    先将VALUE转换成二进制
    然后与16进制的000000FF作与运算;
    <<是右移!
      

  5.   

    1000000 的二进制码: 0000 0000 0000 1111 0100 0010 0100 0000
    byte b = (byte)(value & 0x000000ff); //取value 的最后八位, 即 0100 0000 ,转换成整型值为64
    byte b8 = (byte) ( (value & 0x0000ff00) >> 8);//取value的第16至9位, 即 0100 0010, 然后再右移八位, 得到0100 0010, 转换成整型值为66
    byte b16 = (byte) ( (value & 0x00ff0000) >> 16);//);//取value的第32至17位, 即 0000 1111 , 然后再右移16位, 得到0000 1111 , 转换成整型值为15
    byte b24 = (byte) ( (value & 0xff000000) >> 24);//试着推算一下
      

  6.   

    同意lei198203(lei)
    楼主需要打下基础了,有空看点汇编,你就会明白了
    这里也可以用/和%来算,就是效率低很多
    int i=value%256
    value/=256
    int i8=value%256
    value/=256
    int i16=value%256
    ...
    再把int转成byte,直接在计算时也可以转
    不过要注意i=0~255 b=-128~127,
    b=(byte)((i>127)?(i-256):i)