A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

小王同学的家属

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 小王同学的家属 初级黑马   /  2017-5-14 12:31  /  957 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

System.out.println(3 & -1);这个输出后,结果是3
那么我想问了,3的二进制是:0000 0000 0000 0011
-1的二进制是:1000 0000 0000 0001
两个相与,结果应该是:0000 0000 0000 0001
为什么上面的输出结果却是3呢?

4 个回复

倒序浏览
我知道了,因为是以补码的形式运算的,那么3的补码因为是正数所以还是0000 0000 0000 0011
而-1的补码是原码求反加1,所以应该是1111 1111 1111 1111,这两个相与结果是:0000 0000 0000 0011,因为结果是正数,所以其源码也还是这个,结果就是3
回复 使用道具 举报
回复 使用道具 举报
你自己的解释很对,不过负数的补码是从右往左碰到第一个1,然后1之前所有变为其反码,这样记计算更快一点!
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
嗯!就是这样的,没毛病
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马