这是逻辑"and"运算符的正确用法吗?
Is this a proper use of the logical "and" operator?
我正在看别人的代码,他们做了:
if ( myNum > (num1 && num2 && num3) )
…以便在myNum大于num1、num2和num3时执行代码。这能行吗?
谢谢大家。我不认为它会起作用,但我不是专家,所以我想我应该问一下专家。假设值的类型为int
,在C或c++中,这将首先求值
(num1 && num2 && num3)
(num1 !=0) && (num2 != 0) && (num3 != 0)
c++中的结果是true
或false
, C中的结果是1或0。
然后将myNum
与该结果进行比较。
不——至少在c#或Java中肯定不会。你想要的:
if ((myName > num1) && (myNum > num2) && (myNum > num3))
(这里可能不需要括号——我永远记不住操作符的优先级。)
在Java或c#中不能工作,因为&&
是对布尔操作数的运算符,结果为布尔。它有可能在较弱的强类型语言中编译/运行,但我非常怀疑它在任何主流语言中都能达到预期的效果。
不行,不行。为什么它不能工作取决于语言,但是(num1 &&num2,,第3名将首先用你标注问题的所有语言进行评估。提供(num1 &&num2,,num3)实际编译并计算为某值,然后您将得到myNum>某值
这至少在C中是不正确的:http://codepad.org/R9IP0ZOr
int main()
{
int myNum = 10;
int num1,num2,num3 ;
num1 = 15;
num2 = 16;
num3 = 17;
if ( myNum > (num1 && num2 && num3) )
printf("%s","YES|GREATER");
else
printf("%s","NO|SMALLER");
} // prints "YES|GREATER" even though all numbers are greater than myNum
正确的语句应该是:
if( (myName > num1) && (myNum > num2) && (myNum > num3) )
{
}
标签中没有任何语言。嗯,我认为它可能在C和JavaScript中工作,但肯定不是预期的。
如果myNum, num1, num2和num3是具有>和&&过载。但是创建这样一个类来处理这个问题可能不值得。
这是有效的JavaScript代码,但可能会与编写它的人所期望的不同。
它最终会计算if(myNum > num3)
因为(num1 && num2 && num3)
只会返回num3
的值
或者更花哨一点:
if(Num > Math.Max(Num1,Math.Max(Num2,Num3)))
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 这里的 = 运算符有什么用法?
- C++:类类型引用运算符=用法
- 在调用运算符重载时识别调用上下文/用法C++
- 逗号运算符与圆括号表达式的用法示例
- C++ + 运算符的这种用法叫什么?目的是什么
- 是具有复制和交换习惯用法的复制赋值运算符,建议进行自赋值检查
- 为什么内存泄漏只发生在赋值运算符重载的情况下,而不是在复制构造函数中,以及复制和交换习惯用法如何解决它
- C++前缀增量运算符返回左值这一事实的实际用法
- unordered_multimap用法和运算符覆盖
- ()运算符的这种特殊用法是什么意思
- 逗号运算符的正确用法是什么
- 运算符重载和到布尔的隐式转换与安全布尔习惯用法有关
- 在 C 语言中 &(AND) 运算符的用法是什么?
- 条件运算符的奇怪用法 (>?=)
- 这是逻辑"and"运算符的正确用法吗?
- c++中的运算符|=及其用法