SCJP考题一道:按位异或 运算符 与boolean值

kurt17 2011-11-03 10:34:22
Given:
3. public class Spock {
4. public static void main(String[] args) {
5. Long tail = 2000L;
6. Long distance = 1999L;
7. Long story = 1000L;
8. if((tail > distance) ^ ((story * 2) == tail))
9. System.out.print("1");
10. if((distance + 1 != tail) ^ ((story * 2) == distance))
11. System.out.print("2");
12. }
13. }

What is the result?
A. 1
B. 2
C. 12
D. Compilation fails.
E. No output is produced.
F. An exception is thrown at runtime.

如果单独输出:System.out.println((tail>distance)^((story*2)==distance));结果是true。
为何在第9行中不输出1呢?
请高手多指教。这点很迷惑的,不是很懂。非常感谢。
...全文
143 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanghw2008 2013-12-10
  • 打赏
  • 举报
回复
(tail > distance):true ((story * 2) == tail) :true true ^ true : false 第一个不会输出; (distance + 1 != tail):false ((story * 2) == distance):false false ^ false : false 第二个也不会输出。 异或运算,1,false ^ false : false 2,true ^ true : false 3,false ^ true : true 4,true ^ false : true
shuwei003 2011-11-04
  • 打赏
  • 举报
回复
^是异或运算符,只有当两端一个为true一个为false,这个表示式true ^ false或者false ^ true才会为true,其他情况为false。
shine333 2011-11-03
  • 打赏
  • 举报
回复
直接忽略1F

true ^ true 等价于 1 ^ 1,两边相同,得到0,false
kurt17 2011-11-03
  • 打赏
  • 举报
回复
对不起对不起,是我自己测试时输入错了。
结果没错的,
((tail > distance) ^ ((story * 2) == tail))的值是false;

提问的帖子中错输成了:
如果单独输出:System.out.println((tail>distance)^((story*2)==distance));结果是true。

按照题中的数据来算是完全没有问题的。

qqlwq123 2011-11-03
  • 打赏
  • 举报
回复
tail > distance这得到的是布尔量,和C不同,JAVA这个就是一个false或true的值,不能像C那样转成1,0那样进行运算,所以第一个if怎样都是false的。不能进行运算为什么还能得到false而不报错,我就不知道了。

62,614

社区成员

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

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