黑马程序员技术交流社区
标题:
关于位运算的问题
[打印本页]
作者:
小王同学的家属
时间:
2017-5-14 12:31
标题:
关于位运算的问题
System.out.println(3 & -1);这个输出后,结果是3
那么我想问了,3的二进制是:0000 0000 0000 0011
-1的二进制是:1000 0000 0000 0001
两个相与,结果应该是:0000 0000 0000 0001
为什么上面的输出结果却是3呢?
作者:
小王同学的家属
时间:
2017-5-14 12:40
我知道了,因为是以补码的形式运算的,那么3的补码因为是正数所以还是0000 0000 0000 0011
而-1的补码是原码求反加1,所以应该是1111 1111 1111 1111,这两个相与结果是:0000 0000 0000 0011,因为结果是正数,所以其源码也还是这个,结果就是3
作者:
兔巴斯基丶
时间:
2017-5-14 13:52
位与运算,有0则0
作者:
J0bs
时间:
2017-5-15 23:20
你自己的解释很对,不过负数的补码是从右往左碰到第一个1,然后1之前所有变为其反码,这样记计算更快一点!
作者:
烽火狼烟
时间:
2017-5-16 01:17
嗯!就是这样的,没毛病
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2