奇怪,为什么 string 用 byte <<= 1 后,再 byte >>= 1,再 new String(b),得到的字符串为什么不是原来的 string ,怎么样才能得回原来的 string?
public static void main(String[] args) {
String str = "hello,world.";
byte[] b = str.getBytes();
String bstr1 = new String(b);
for (int i = 0; i < b.length; i++) {
b[i] <<= 1;
}
String bstr2 = new String(b);
for (int i = 0; i < b.length; i++) {
b[i] >>= 1;
}
String bstr3 = new String(b);
System.out.println("The result:\n" 
+ "1=" + bstr1 +"\n"
+ "2=" + bstr2 +"\n"
+ "3=" + bstr3 +"\n"
);
}以下是运行结果:The result:
1=hello,world.
2=惺刎轝钷湄萛
3=桢祆?黠蜢?--------------------上面是要每一个 byte[i] 先向左移一位,得出一个字符串,然后再将每一个 byte[i] 向右移一位,(这里是想还原)不是这样还原移位的字符串的吗???????

解决方案 »

  1.   

    呵呵~~~
    说个例子,或许楼主就明白了假设 a=00110111,则b=a>>1=00011011
    那么 c=b<<1=00110110a和c相等么??
      

  2.   

    移位后缺位用0补,除非这个字原来首尾都是0,否则是1就改了
    -------------------------------------------------------------不都是这样的,要看这个数的符号位是正还是负
    太复杂的我也解释的不太明白,所以就没举太复杂的例子
    涉及到补码,楼主要想彻底弄明白就仔细研究研究书上的移位操作吧
    建议hellwindy(夜神·月) 也仔细研究研究书上的移位操作吧~~~~