byte[] array = new byte[2];
int tmp=0;
//把两个字节转换为整数
tmp = (short)(( array[0] << 8 )|( array[1] & 0xff ));
tmp = tmp & 0xFFFF;请问红色部分是什么意思。
为什么要和0xff与,为什么又和0xFFFF与呢?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【qinmi】截止到2008-07-15 14:57:49的历史汇总数据(不包括此帖):
    发帖的总数量:14                       发帖的总分数:260                      每贴平均分数:18                       
    回帖的总数量:21                       得分贴总数量:6                        回帖的得分率:28%                      
    结贴的总数量:14                       结贴的总分数:260                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    和0xFF或者0xFFFF与感觉数本身没有发生变化吧
      

  3.   

    功能就是无论左操作数是什么 合法的前提下 按一定规则 将与运算结果限定在 [0,右操作数]范围内
    oxff 对应 [0,255]
    0xffff 对应 [0,65535]
      

  4.   

    举例 对于-1而言 默认int 32位全1
    而与上0xff之后 只有最低8位为1
    再做或运算时两者就会有区别了
      

  5.   

    tmp = tmp & 0xFFFF; 
    那么这句有什么用。
    tmp 就是int 型的,本来就是32位。
      

  6.   

    看看这个例子:
    public class Test {    public static void main(String[] args) {
            byte[] array = new byte[2];
            int tmp = 0;
            array[0] = 62;
            array[1] = 38;
            System.out.printf("%h\n",array[0]);
            System.out.printf("%h\n",array[1]);
            //把两个字节转换为整数
            System.out.printf("%h\n",array[0]<<8);
            System.out.printf("%h\n",array[1]&0xff);
            System.out.printf("%h\n",((array[0] << 8) | (array[1]) & 0xff));
            tmp = (short) ((array[0] << 8) | (array[1]) & 0xff);
            System.out.printf("%h\n",tmp);
            tmp = tmp & 0xFFFF;
            System.out.printf("%h\n",tmp);
        }
    }
      

  7.   

    呵呵
    这个是利用位运算将两个字节拼成一个数字
    比如,一个byte占8位,即一个字节
    而在表示一个int类型的数据时
    在数据传输低层要转换成byte[]数组传输
    因此就要将int类型的数转换为字节数组表示
    如用一个字节表示高8位,一个字节表示低8位
      

  8.   


    public class Convert { /**
     * @param args
     */
    public static void main(String[] args) {
    byte[] array = new byte[2]; 
    array[0]= 1;
    array[1]= 4;
    int tmp=0; 
    //把两个字节转换为整数 
    tmp = (short)((array[0]<< 8)|(array[1] & 0xff)); 
    // tmp = tmp & 0xFFFF; 

    System.out.println(tmp);
    }}运行后显示为 : 260
    array[0]: 0000 0001  表示高8位
    array[1]: 0000 0100  表示低8位
    然后操作是这样的:  0000 0001 0000 0000
                     0000 0000 0000 0100
                   ----------------------
                     0000 0001 0000 0100
                                 =260至于这一句:tmp = tmp & 0xFFFF; 
    就是取数据的低16位...
      

  9.   

    这两句只是为了让读者明白写代码的人的想法,将array[0]当高8位,array[1]当低八位,然后得到一个16位的short型整数。
    这两句分别表示取array[1]的低8位和tmp的低16位,但由于array[1]本来就是8位,而tmp虽然是32位,但高16位都为0,所以将它们注释掉也不影响结果,写成:tmp = (short)((array[0]<< 8)|array[1]),并将tmp = tmp & 0xFFFF; 注释掉。试试就知道了。
      

  10.   

    运行后显示为 : 260 
    array[0]: 0000 0001  表示高8位 
    array[1]: 0000 0100  表示低8位 
    然后操作是这样的:  0000 0001 0000 0000 
                    0000 0000 0000 0100 
                  ---------------------- 
                    0000 0001 0000 0100 
                                =260 至于这一句:tmp = tmp & 0xFFFF; 
    就是取数据的低16位... 真的有人用java搞这么底层的开发吗?
      

  11.   

    把 tmp 高 16 位置为 0。
      

  12.   

    正解!
    oX表示的是16进制.
    0xFFFF 其实就是二制的16个1;
    同理:oxFF 就8个1
      

  13.   

    oxff 对应 [0,255] 
    0xffff 对应 [0,65535]
    程序是做什么用的