我假设这只返回一个int.还有什么事情我应该知道吗?C/C++的差异?
float a = 2.5;
!a; // What does this return? Int? Float?
该逻辑AND和OR运算是在JavaScript中只有懒运营三元一起条件运算符.他们使用以下规则进行短路评估测试:
false && anything === false
true || anything === true
这与在Haskell中实现的方式相同:
(&&) :: Bool -> Bool -> Bool
False && _ = False
True  && x = x
(||) :: Bool -> Bool -> Bool
True  || _ = True
False || x = x
但是根据MDN,JavaScript中的逻辑运算符是左关联的.这是违反直觉的.在我的拙见中,他们应该是正确的联想.Haskell做对了.Haskell中的逻辑运算符是正确的关联:
infixr 3 &&
infixr 2 ||
考虑Haskell中的以下表达式:
False && True && True && True
因为&&在Haskell中是正确关联的,所以上面的表达式相当于:
False && (True && (True && True))
因此,表达式 …
javascript haskell logical-operators associativity ecmascript-5
def logical_xor(a, b): # for example, -1 and 1
    print (a < 0) # evaluates to True
    print (b < 0) # evaluates to False
    print (a < 0 != b < 0) # EVALUATES TO FALSE! why??? it's True != False
    return (a < 0 != b < 0) # returns False when it should return True
print ( logical_xor(-1, 1) ) # returns FALSE!
# now for clarification
print ( True != False) # PRINTS TRUE!
有人可以解释发生了什么吗?我想做一个班轮:
lambda …下面有两个if语句,它们使用逻辑运算符有多个条件.逻辑上两者都相同,但检查顺序不同.第一个工作,第二个工作失败.
我引用了MSDN来检查是否定义了执行条件的顺序; 但我找不到.
考虑具有&&逻辑运算符的多重检查条件.是否保证始终检查第一个条件,如果不满足,则不会检查第二个条件?
我曾经使用方法1,它运作良好.寻找证明使用的MSDN参考.
UPDATE
参考"短路"评估
码
  List<string> employees = null;  
  if (employees != null && employees.Count > 0)
  {
        string theEmployee = employees[0];
  }
  if (employees.Count > 0 && employees != null)
  {
        string theEmployee = employees[0];
  }
当我第一次学习如何编写程序时,我使用了C.(非常基本的命令行应用程序)在这两种语言中你都使用了! - 操作员通常喜欢这样:
    if(!true){
       //false..
}
我想在c#中做一些比特掩码,我想知道'〜'运算符.
现在我有点困惑,因为在我自己的理解!和〜应该做同样的事情.
这适用于c#:
int i = ~0xffffffff; // i = 0
bool j = !true; // j = false
这不是:(但它确实在c中工作,并且完全符合我的预期)
int i = !0xffffffff; // i = 0
那么〜和之间的差异是什么?他们为什么把它们分开?
在js
(f1() || f2())
将不执行f2,如果f1回报率true通常是除了当它是不是一件好事.有||没有短路的版本?
就像是
var or = function(f, g){var a = f(); var b = g(); return a||b;}
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) 
{
   int i=-5;
   while(~(i))
   {
      cout<<i;
      ++i;
   }
 }
输出为-5,-4,-3,-2.不应该打印值直到-1?为什么它只到-2.请解释一下'not'和'negation'运算符之间的区别.当我编写程序时,它们就是bug的来源.
while(i)
我知道循环条件对于正和负i都是正确的,除了0.
while(!i) vs while(~i)
对于'i'的值,上述两个循环是否被执行?
我是C编程语言的初学者,最近我读过有关Logical AND &&运算符的内容.
我也知道,在C编程语言中,所有非零值都被视为TRUE.
NON-ZERO && NON-ZERO = 1  
NON-ZERO && ZERO = 0  
ZERO && NON-ZERO = 0
ZERO && ZERO = 0  
但是当我处理以下程序时,我没有得到预期的答案.
int main(){  
  int x, y, z;  
  x = y = z = -1;  
  y = ++x && ++y && ++z;  
  printf("x = %d, y = %d, z = %d, x, y, z);  
  return 0;  
} 
我期待着
x = 0, y = 0, z = 0 
但答案是
x = 0, y = 0, …一时兴起,我最近测试了这两种方法timeit,看看哪种评估方法更快:
import timeit
"""Test method returns True if either argument is falsey, else False."""
def and_chk((a, b)):
    if not (a and b):
        return True
    return False
def not_or_chk((a, b)):
    if not a or not b:
        return True
    return False
......并得到了这些结果:
 VALUES FOR a,b ->      0,0         0,1         1,0         1,1
        method
    and_chk(a,b)    0.95559     0.98646     0.95138     0.98788
 not_or_chk(a,b)    0.96804     1.07323     0.96015     1.05874
                                            ...seconds per 1,111,111 cycles.
效率的差异在1%到9%之间,总是有利于if not (a and b),这与我的预期相反,因为我理解if not a or not b它将按顺序评估其术语(if …
python if-statement micro-optimization logical-operators python-2.7
c ×4
c# ×2
c++ ×2
javascript ×2
operators ×2
python ×2
.net ×1
conditional ×1
ecmascript-5 ×1
haskell ×1
if-statement ×1
logic ×1
python-2.7 ×1
python-3.x ×1
return ×1