比如  int i = 9;
int j = 13;
int k = (i&j)>>2;
怎么通过 k与j 的相关运算再得到 i 的值呢

解决方案 »

  1.   

    不知所云.i是:1001
    j是:1101i&j是:1001. >>2:结果是0010.就是2
      

  2.   

    理论上不可逆的。简单说,因为 >> 运算,会丢失一些信息。因为
    当i = 11;的时候
    你会发现k的值依然是2,那么通过2和j的值,怎么知道i是9,还是11呢?也就是说,不可逆。
      

  3.   

    哪怕是 k = i & j 的话,都回不去了。因为 0 & 0 = 0, 1 & 0 = 0,如果 k 某位是 0,而 j 的那一位也是 0,那你说 i 的那一位是 0 还是 1 呢?
      

  4.   

    i是:1001 
    j是:1101 i&j是:1001. >>2:结果是0010.就是2 
      

  5.   

    如果是想达到简单的编码。又方便的解码。便宜又实惠的方法就是异或,异或c编码,再异或c就回来了。
    按位与和移位(循环移位例外,但java好像没有)会造成源字符单元信息丢失,毕竟能表示的位变少了:比如,10010011,11001001这种1个字节内容你最多能表示的信息量就是256种,但你如果按位与了00001111(15)则有效位就变成了4位,那你所有信息量最大就16种,只要有字符用到了高4位,就必定存在信息丢失。