public static void main(String [] args)
{
byte temp1=-12;
byte temp0=-10;
System.out.println(temp1<<8);
short temp=(short)(temp1<<8|temp0);//我想把temp1 作为高位 temp0作为低位 通过或运算
 System.out.println(temp);//拼接成一个short类型 但是出现数据丢失 只剩下temp0  -10
                          // 但是如果temp0为正数 通过或运算得到的结果是对的}

解决方案 »

  1.   

    short  temp=temp1;
    temp=temp<<8;
    temp=temp|temp0;
      

  2.   

    short temp=(short)(temp1 < <8|temp0);//你这里把temp1左移了8为 当然成0了 而已或temp0 就成了temp0了。
      

  3.   

    问题出在你按位或运算(|temp0),byte类型进行按位或运算时,temp0和temp都会被提升为int型,因为都是负数,所以提升时高位都变成1,而不是0.那么
    temp0<<8 就变成 11111111 1111111 11110100 00000000
    按位或之前temp 就变成 11111111 1111111 11111111 11110110
    一旦它俩按位或,那么还是temp的值,即是-10。
    我的处理方法class Move
    {
    public static void main(String [] args) 

    byte temp1=-12; 
    byte temp0=-10; 
    short temp=(short)(temp1<<8|(temp0 & 0x00ff));//与0x00ff进行AND操作,将高位变成0
    System.out.println(temp);
                            
    }
    }结果输入为 -2826
    对于正数也可以
      

  4.   

    temp1<<8  =  11111111111111111111010000000000
    temp0 = 11111111111111111111111111110110
    你说他们两个 或 之后 结果是多少?
      

  5.   

    3楼 确实对 我忘了java位用算是以int长度运算的 c用得多了