标签: logical-operators

C预处理器测试多个宏的定义

我搜索了网站,但没有找到我正在寻找的答案,所以这里是一个非常快速的问题.

我想做那样的事情:

#ifdef _WIN32 || _WIN64
     #include <conio.h>
#endif
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我知道_WIN32是为32位和64位窗口定义的,所以我可以用于Windows检测.我更感兴趣的是我是否可以使用预处理程序指令这样的逻辑运算符,如果是,如何,因为上述方法不起作用.

用gcc编译我得到:

警告:#ifdef指令结束时的额外令牌,它基本上只需要第一个MACRO并忽略其余的.

c logical-operators c-preprocessor preprocessor-directive

43
推荐指数
2
解决办法
2万
查看次数

是否可以一次为多个指令定义{$ IFDEF}?

是否可以在一个{$ IFDEF}指令中定义多个条件?
我想有这样的语法:

{$IFDEF Condition1 OR Condition2} DoSomething; {$ENDIF}
{$IFDEF Condition1 AND Condition2} DoSomethingElse; {$ENDIF}
Run Code Online (Sandbox Code Playgroud)

谢谢

delphi conditional-compilation logical-operators

42
推荐指数
3
解决办法
2万
查看次数

如何使用numpy.where与逻辑运算符

我试图找到一个数组中大于a但小于b的所有元素的索引.这可能只是我的语法问题,但这不起作用:

numpy.where((my_array > a) and (my_array < b))
Run Code Online (Sandbox Code Playgroud)

我该怎么解决这个问题?或者有更好的方法吗?

谢谢!

python numpy where logical-operators

41
推荐指数
1
解决办法
5万
查看次数

AND和OR的问题(COBOL)

我有一个明天需要上班的作业,我似乎无法将这一部分弄清楚.看到我被给了一个带有一堆名字的输入文件,其中一些我需要跳过,每个都有额外的信息.我正在尝试使用AND和OR来跳过我不需要的名字,我想出了这个.

IF DL-CLASS-STANDING = 'First Yr' OR 'Second Yr' AND
GRAD-STAT-IN = ' ' OR 'X'
Run Code Online (Sandbox Code Playgroud)

它除了一个人之外什么都没有,但当我试图添加另一组AND和OR时,程序开始表现得像那些甚至没有的规定.

我是否为编译器过于复杂?是否有更简单的方法来跳过事物?

cobol logical-operators

37
推荐指数
3
解决办法
4万
查看次数

为什么用!!(条件)代替(条件)?

我见过人们使用带有两个'!'的条件子句的代码

#define check_bit(var, pos)       (!!((var) & (1 << (pos))))
#define likely(x)       __builtin_expect(!!(x),1)
#define unlikely(x)     __builtin_expect(!!(x),0)
Run Code Online (Sandbox Code Playgroud)

是我能找到的一些例子.

使用!!(condition)结束有什么好处(condition)吗?

c logical-operators

35
推荐指数
2
解决办法
2285
查看次数

存在非短路逻辑运算符的原因

当与使用boolean的操作数,&|成为逻辑每运营商的JLS第15.22.2.不像&&||,然而,这些不短路; 他们总是评估双方.我有一个愚蠢的问题:当我们拥有更高效的短路逻辑运算符(,)时&,为什么效率较低的非短路逻辑运算符(,|)仍然存在?我的意思是,与短路逻辑运算符相比,非短路逻辑运算符的实际用途是什么?换句话说,总是通过使用非短路逻辑运算符来评估双方的用法是什么?&&||

java logical-operators

33
推荐指数
2
解决办法
1万
查看次数

Handlebarsjs检查字符串是否等于值

是否可以在Handlebars中检查字符串是否等于另一个值而不注册帮助程序?我似乎无法在Handlebars参考中找到与此相关的任何内容.

例如:

{{#if sampleString == "This is a string"}}
...do something
{{/if}}
Run Code Online (Sandbox Code Playgroud)

string logical-operators handlebars.js

33
推荐指数
6
解决办法
5万
查看次数

为什么C没有逻辑赋值运算符?

我需要编写表单的声明

a = a || expr;
Run Code Online (Sandbox Code Playgroud)

expr应该在哪里评估,并将结果分配给aiff a未设置.这取决于逻辑OR的短路能力.

当然,写上述内容的时间更短

a ||= expr;
Run Code Online (Sandbox Code Playgroud)

但是(令我惊讶的是)C没有逻辑赋值运算符.

所以我的问题是双重的.首先,是否有一种更短的方式来编写标准C中的第一个语句(三元运算符更糟糕 - a = a ? a : expr需要我拼出a三次).

其次,为什么C中没有逻辑分配?我能想到的可能原因是:

  • 它使语法难以解析?
  • 处理这些案件的短路有一些微妙之处吗?
  • 它被认为是多余的(但这不是反对所有运营商任务的论据吗?)

编辑

请解锁这个问题因为:

  • 与之相关的问题(作为所谓的副本)尚未得到回答.该问题的(已接受)答案表明,||=由于重复了该功能,因此不存在|=.这是错误的答案.|=不会短路.

  • C和C++不是同一种语言.我想知道为什么C没有它.实际上,像C++这样的派生语言,特别是Java(没有像Edmund的答案中提到的遗留代码问题那样)的问题使得这个问题更加有趣.

编辑2

现在看起来我原来的意图是错的.在语句中a = a || expr(其中a是积分并expr返回一个整数值,首先两者a并将expr隐式转换为"布尔值",然后将"布尔"值赋值给a.这将是不正确的 - 积分值将丢失.谢谢,詹斯和埃德蒙.

所以对于问题的第一部分,编码我的意图的正确方法,而不是替代方法:)将是:

if (!a) a = expr;
Run Code Online (Sandbox Code Playgroud)

要么

a = a ? a : expr;
Run Code Online (Sandbox Code Playgroud)

他们应该优化相同(我认为)虽然我个人更喜欢第一个(因为它有一个较少a的类型). …

c logical-operators

32
推荐指数
3
解决办法
1万
查看次数

&&和&与bool(s)之间有什么区别吗?

在C++中,bool(s)之间的&&(逻辑)和&(按位)之间有什么区别吗?

bool val1 = foo();
bool val2 = bar();

bool case1 = val1 & val2;
bool case2 = val1 && val2;
Run Code Online (Sandbox Code Playgroud)

case1case2相同或如果不究竟如何他们有所不同,为什么会选择一个一个比其他?是一个按位和bools便携式?

c++ boolean bitwise-operators logical-operators language-lawyer

31
推荐指数
4
解决办法
3万
查看次数

使用双逻辑非(!!)运算符混淆

我有一些广泛使用的C++代码!!.我有点困惑,因为据我所知,!!它不是一个独立的运营商,而是两个!接一个的运营商.所以那就意味着!!foo和刚刚一样foo.

!!实际上是否有任何地方和/或理由?我在考虑它是否可能有一些明智的含义?那么你首先执行一些有点操作foo,然后!对结果执行?但我似乎不记得!被用作一个有点明智的操作员,似乎没有找到任何参考告诉我它也是.据我所知!,仅用作逻辑运算符,在这种情况下

!!foo == foo

c++ bitwise-operators logical-operators

31
推荐指数
2
解决办法
8521
查看次数