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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马19我最牛 中级黑马   /  2013-3-20 20:30  /  2366 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println(3&2);
  6.         }
  7. }
复制代码
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println(3&&2);
  6.         }
  7. }
复制代码
为什么第一段代码能编译,第二段不能编译,
就是&和&&的问题,他们都是逻辑运算符啊!

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-20 22:26

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑运算与(and).
比如说3&2 会将3和2变成2进制然后进行与运算
010
011
------
010
得出来的结果是010 转化成十进制就是2
而&&是逻辑运算符,只有&&左右两边的运算式都为true的时候,才会返回true
对于A&B,不管a是否为假,仍然要判断B。
对于A|B,不管a是否为真,仍然要判断B。
而对于A&&B,A||B在以上情况就不会去判断B了。因此&&也被称作短路与

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。这是它们通用的功能,但是&还可以作为位运算符,你这个题目中只能作为位运算符运算,逻辑运算符两边必须是boolean类型,当两边是整型数据的话,&是作为位运算符运算得出结果的.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
这个是因为&可以作为位运算符的,但是&&就不可以了,你的第一段代码输出结果是位运算的结果,第二段两边不是boolean型数,所以不能编译。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
&不仅是逻辑运算符,还是位运算符,这里3&2是作为位运算符使用.&&只是逻辑运算符,逻辑运算符的结果都是布尔型的,3&&2很明显得不到布尔型的结果,如果改成true&&false就可以运行了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李阳阳 于 2013-3-20 20:53 编辑

&是位运算符,&&是逻辑运算符。而逻辑运算主要用于条件判断。
运算符&用于对两个数以二进制的形式,按位进行逻辑与运通常用于算;而运算符&&条件表达式中,
对两个或多个关系表达式进行逻辑与运算,并且运算符&&是短路运算符,也就是当&&之前的表达式
为false时,就不再对&&之后的表达式进行计算了,而是直接返回假值false。

例如:
整数 3 的二进制表示为:00000000 00000000 00000000 00000011
整数 6 的二进制表示为:00000000 00000000 00000000 00000110
按位与运算的结果为 2 :00000000 00000000 00000000 00000010
上下 对应位都为1时,结果为1,否则为零。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
lxww 中级黑马 2013-3-20 21:12:49
7#
逻辑运算符是判断布尔类型,而位运算符可以操作int类型数据。你这个例子中,
&这个既是逻辑运算符,也是位运算符,而&&只是逻辑运算符,所以第一个有结果,第二个没结果。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,
否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式

表达式1&&表达式2: 表达式1不成立,则表达式2不执行;
表达式1&表达式2:表达式1不成立,表达式2也执行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马