byte a=112,用程序实现,将其循环左移三位和右移三位。
112的二进制原码:0111 0000
112循环左移3位后的二进制码:1000 0011
112循环右移3位后的二进制码:0000 1110
先将循环左移的程序代码告诉大家:
public class TestCircle{
public static void main(String args[]){
byte x=112;
System.out.println((byte)(x<<3|x>>5));
}
}
程序的输出结果是-125,它的原码为1111 1101,补码为1000 0011(正好是112循环左移三位后的数字)
再看循环右移的程序代码:
public class TestCircle{
public static void main(String args[]){
byte x=112;
System.out.println((byte)(x>>3|x<<5));
}
}
程序的输出结果是14,他的原码、补码相同都是0000 1110(正好是112循环右移三位后的数字)
总结:对于一个数据类型长度为L的数据n,对其进行循环左移m位(或右移m位),只需将数据n左移(或右移)m位的结果和数据n右移(或左移)L-m位的结果进行或运算,再将或运算的结果强制转换为原类型即可。