按位移运算符(>>)和按位与运算符(&)的反运算时什么样的

CTea321 2009-09-11 02:23:59
比如 int i = 9;
int j = 13;
int k = (i&j)>>2;
怎么通过 k与j 的相关运算再得到 i 的值呢
...全文
2546 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
铛铛铛笨笨 2011-04-08
  • 打赏
  • 举报
回复
学习了。不可逆!
clariones 2010-09-14
  • 打赏
  • 举报
回复
这两个运算符都不能逆运算啊。
不如楼主说说要实现啥功能,应该会有其他方案吧
漫步者、 2010-09-13
  • 打赏
  • 举报
回复
通过逆运算了!
eggno8 2010-09-10
  • 打赏
  • 举报
回复
信息丢失就回不来。。。
eggno8 2010-09-10
  • 打赏
  • 举报
回复
如果是想达到简单的编码。又方便的解码。便宜又实惠的方法就是异或,异或c编码,再异或c就回来了。
按位与和移位(循环移位例外,但java好像没有)会造成源字符单元信息丢失,毕竟能表示的位变少了:比如,10010011,11001001这种1个字节内容你最多能表示的信息量就是256种,但你如果按位与了00001111(15)则有效位就变成了4位,那你所有信息量最大就16种,只要有字符用到了高4位,就必定存在信息丢失。
fallea828 2010-09-10
  • 打赏
  • 举报
回复
CTea321 2009-09-11
  • 打赏
  • 举报
回复
看来真的是不能进行逆运算
2楼的理解能力值得怀疑
lxq137171010 2009-09-11
  • 打赏
  • 举报
回复
i是:1001
j是:1101

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

  • 打赏
  • 举报
回复
哪怕是 k = i & j 的话,都回不去了。

因为 0 & 0 = 0, 1 & 0 = 0,如果 k 某位是 0,而 j 的那一位也是 0,那你说 i 的那一位是 0 还是 1 呢?
weejjscsh 2009-09-11
  • 打赏
  • 举报
回复
位移运算有可能会丢失一部分数据
逆运算会出错的
healer_kx 2009-09-11
  • 打赏
  • 举报
回复
理论上不可逆的。

简单说,

因为 >> 运算,会丢失一些信息。

因为
当i = 11;的时候
你会发现k的值依然是2,那么通过2和j的值,怎么知道i是9,还是11呢?也就是说,不可逆。

bigbug9002 2009-09-11
  • 打赏
  • 举报
回复
不知所云.

i是:1001
j是:1101

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



lkf15080 2009-09-11
  • 打赏
  • 举报
回复
学习一下啊

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧