关于JAVA 中的位移运算>>
代码:charcData='志';bytebData[]=newbyte[2];bData[0]=(byte)(0xff&(cData>>8));bData[1]=(by...
代码:char cData = '志';
byte bData[ ] = new byte[2];
bData[0] = (byte)(0xff&(cData>>8));
bData[1] = (byte)(0xff&(cData>>0));
不明白上述代码的含义,特此请教 展开
byte bData[ ] = new byte[2];
bData[0] = (byte)(0xff&(cData>>8));
bData[1] = (byte)(0xff&(cData>>0));
不明白上述代码的含义,特此请教 展开
2个回答
2010-09-19
展开全部
char的范围是0~65535.用2进制表示,就是0000 0000 0000 0000到1111 1111 1111 1111
byte的范围是-128~127.用2进制表示,就是1000 0000到0111 1111.
看到了么,一个char要用两个byte才能存下来。
例如假设cData=1101 0101 0001 0001:
>>8就是说,右移8个bit,二进制的.右移8bit,那个1101 0101就往右移动8位。因为首位是1,所以前面全部补1,得到1111 1111 1101 0101.然而这时候,想得到的是1101 0101,而不需要前面那8个1,所以用0xff&来处理。0xff就是0000 0000 1111 1111,&就是这个bit在两个操作数都是1的情况下使答案bit为1,就是是取后8个bit。所以0000 0000 1111 1111 & 1111 1111 1101 0101=0000 0000 1101 0101.这样,就取得了cData的前8bit.存入bData[0].
>>0无运算,只是写着好看的。0xff&cData直接取后8bit,这个例子里,就是说0000 0000 1111 1111 & 1101 0101 0001 0001=0000 0000 0001 0001.这样,就取得了cData的后8bit.存入bData[1].
byte的范围是-128~127.用2进制表示,就是1000 0000到0111 1111.
看到了么,一个char要用两个byte才能存下来。
例如假设cData=1101 0101 0001 0001:
>>8就是说,右移8个bit,二进制的.右移8bit,那个1101 0101就往右移动8位。因为首位是1,所以前面全部补1,得到1111 1111 1101 0101.然而这时候,想得到的是1101 0101,而不需要前面那8个1,所以用0xff&来处理。0xff就是0000 0000 1111 1111,&就是这个bit在两个操作数都是1的情况下使答案bit为1,就是是取后8个bit。所以0000 0000 1111 1111 & 1111 1111 1101 0101=0000 0000 1101 0101.这样,就取得了cData的前8bit.存入bData[0].
>>0无运算,只是写着好看的。0xff&cData直接取后8bit,这个例子里,就是说0000 0000 1111 1111 & 1101 0101 0001 0001=0000 0000 0001 0001.这样,就取得了cData的后8bit.存入bData[1].
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询