java中左移位的错误结果
我用java做了一个变量,java中左移位的错误结果,java,Java,我用java做了一个变量,字节a=0xA6//10100110 然后我做了这个: System.out.println(Integer.toHexString( ((short)a<<8)&0xFFFF )); System.out.println(Integer.toHexString)((短)a字节值A6表示负数(字节用Java签名)。当您转换为short时,它将符号扩展为FFA6。此外,移位操作是以整数值执行的,因此它再次符号扩展为ffffa6。左移三位得到FFFFF
字节a=0xA6//10100110
然后我做了这个:
System.out.println(Integer.toHexString( ((short)a<<8)&0xFFFF ));
System.out.println(Integer.toHexString)((短)a字节值A6
表示负数(字节用Java签名)。当您转换为short
时,它将符号扩展为FFA6
。此外,移位操作是以整数值执行的,因此它再次符号扩展为ffffa6
。左移三位得到FFFFFD30
,取下16位得到0000FD30
如果移位8位,这并不重要,因为您将移位并屏蔽额外的1位。当您声明初始化字节变量时,必须将其从整数向下转换:
byte a = (byte) 0xA6;
所以,你得到的不是10100110,而是1111111111110100110
而且,因为这个左移是这样工作的:
((short)a<<8)&0xFFFF
((短)请演示如何准确初始化变量。在这个问题上需要更多帮助吗?如果不需要,您可以将答案标记为已接受并/或对其进行投票。Eeh…对不起,高,我已经尝试过投票,但我的声誉不足以支持:-)那么…嗯..我如何从一个只声明a
asinta=0xA6;
中得到正确的结果呢?我不能做as int,因为初始数据是byte。所以我必须转换成short:-)然后转换成short:)short a=(short)0xA6;
谢谢你的解释。那么我应该做这个((short)a&0xff更好地使用(a&0xff)
((short)a<<8)&0xFFFF
((short)a<<3)&0xFFFF