黑马程序员技术交流社区

标题: 关于 if 的一些 疑惑 [打印本页]

作者: 天道酬勤_||淡腾    时间: 2014-5-1 22:34
标题: 关于 if 的一些 疑惑
本帖最后由 天道酬勤_||淡腾 于 2014-5-8 13:02 编辑

   if (i<50&i>20);    和if (i<50&&i>20);有什么区别?
作者: liu0o0y    时间: 2014-5-1 23:03
对于bool操作数,& 计算操作数的逻辑“与“;也就是说,当且仅当两个操作数均为 true 时,其结果才为 true。不过对于a && b, 如果 a 为 false,则不计算 b,结果都将是false。
作者: 亚伦    时间: 2014-5-1 23:04
  1. #region 在当前的例子中,&和&&作用一样
  2.             int i = 1;
  3.             int i2 = 1;

  4.             if (i == 1 & i2 == 1)
  5.             {
  6.                 Console.WriteLine("&: i == 1 且 i2 == 1");
  7.             }

  8.             if (i == 1 && i2 == 1)
  9.             {
  10.                 Console.WriteLine("&&: i == 1 且 i2 == 1");
  11.             }
  12.             #endregion

  13.             // &还有另外的作用:
  14.             // 对于整型,& 计算操作数的逻辑按位“与”。仅当两个操作位都为1时结果才是1
  15.             // 请仔细观擦如下代码
  16.             int j = 12;         // 00001100
  17.             int j2 = 10;        // 00001010
  18.             int j3 = j & j2;    // 00001000
  19.             Console.WriteLine("j3 = {0}", j3);
复制代码
同为新人,可能不能回答得尽善尽美。如果有问题请找我讨论。

作者: 亚伦    时间: 2014-5-1 23:13
  1. // 对了,正如2楼所说,&&使用“短路”模式操作,
  2.             // 例如在i == 1 && i2 == 1这条表达式中,i == 1先被求值,如果值为假,那么就没必要(也不会)对 i2 == 1求值(无论i2 == 1的值为真或假,i == 1 && i2 == 1都为假)
  3.             // 同样,||运算符在确认第一条表达式为真后,也不会对第二条表达式求值,因为这没必要。
  4.             // 而&运算符会计算两个表达式,与第一条表达式的值无关。
复制代码


作者: continue     时间: 2014-5-1 23:22
你可以参考哈这个帖子
http://bbs.itheima.com/thread-116291-1-1.html
作者: 一片白    时间: 2014-5-4 16:02
本帖最后由 一片白 于 2014-5-4 16:03 编辑

    二元运算符 (&) 为整型和 bool 类型预定义了二进制 & 运算符。    对于整型,& 计算操作数的按位“与”。
    对于 bool 操作数,& 计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为 true 时,其结果才为 true。         
    条件“与”运算符 (&&) 执行布尔操作数的逻辑“与”运算,但如有必要,只计算第二个操作数。
    它与二元运算符 (&)很像,不同的是,如果 x 为 false,则不计算 y(因为不论 y 为何值,与操作的结果都为 false)。这被称作为“短路”计算。

作者: dwgeneral    时间: 2014-5-6 14:02
& 叫做逻辑与操作符,也叫按位操作运算符, && 叫做条件与操作符。
作者: dwgeneral    时间: 2014-5-6 14:18
具体分析   if (i<50&i>20);    和if (i<50&&i>20)第一个是要将 i 的数值换成二进制再运算,结果应该是和第二个一样  不过要是 if(2 & 3)和 if (2 && 3)就不一样了  2的二进制是10, 3的二进制是11,按位与运算之后结果是 10 ,条件与之后结果是true




作者: 时光♪微凉    时间: 2014-5-6 19:24
‘&’无论条件是否满足,两个条件都会执行,‘&&’如果前面一个为false,则直接返回false,后面一个就不执行了
  1. int i = 0, j = 1;
  2.                 if (i > 0 & j ++ > 0) {
  3.                         //首先执行i>0为false,然后还会继续执行j++>0,返回false,结果j为2。
  4.                 }
  5.                 Console.WriteLine(j);
  6.                 int m = 0, n = 1;
  7.                 if (m > 0 && n ++ > 0) {
  8.                         //首先执行m>0为false,就不会再继续执行n++>0,直接返回false,结果n还是1。
  9.                 }
  10.                 Console.WriteLine(n);
复制代码

作者: .net_交流    时间: 2014-5-7 10:08
&  位运算符 处理二进制数据的 &&逻辑运行符 进行判断的
作者: 永远的小飞侠    时间: 2014-5-8 15:49
&是位运算,结果为数值,&&是与||相反的关系运算符,结果一般为布尔值。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2