标签: logical-operators

设置默认值(条件分配)

在Ruby中,您可以轻松地为变量设置默认值

x ||= "default"
Run Code Online (Sandbox Code Playgroud)

如果x为nil或false,则上述语句将x的值设置为"default"

在PHP中是否有类似的快捷方式,或者我必须使用更长的形式:

$x = (isset($x))? $x : "default";
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来处理PHP?

php ruby logical-operators

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

C++中是否存在非短路逻辑"和"?

tl; dr:C++中是否存在非短路逻辑AND(类似于&&)?

我有两个我想调用的函数,并使用返回值来计算第三个复合函数的返回值.问题是我总是希望评估两个函数(因为它们输出有关系统状态的日志信息)

IE:

bool Func1(int x, int y){
  if( x > y){
    cout << "ERROR- X > Y" << endl;
  }
}
bool Func2(int z, int q){
  if( q * 3 < z){
    cout << "ERROR- Q < Z/3" << endl;
  }
}
bool Func3(int x, int y, int z, int q){
  return ( Func1(x, y) && Func2(z, q) );
}
Run Code Online (Sandbox Code Playgroud)

当然,条件语句是不是在功能那么简单,是的,我知道我可以使用临时变量来存储的两个函数的返回,接着做临时变量"短路"的逻辑,但我想知道是否有一个"优雅"的语言解决方案来保持Func3中的单行返回,同时仍然从两个函数获取日志消息.


答复摘要:

"按位"运算符| 和&可用于获得效果,但仅当返回类型为bool时.我在ANSI C++规范中没有提到这一点.从我可以告诉,这个工程因为"布尔"被转换为int(真= 1,假= 0),然后将位运算符时,则转换回一个布尔值.

也可以使用运算符" +"和" *".这在ANSI C++规范中没有提到,但可能因为与上述相同的原因而起作用." +"给"或"因为true被转换为1,然后除了0之外的任何东西都被转换回true." *"适用于"和"因为1(真)*0(假)== 0(假)和1(真)*1(真)== …

c++ operators logical-operators

30
推荐指数
3
解决办法
6340
查看次数

逻辑运算符与按位运算符。两者都错了?

当我在 Visual\xc2\xa0Studio\xc2\xa02019 的 C++ 控制台应用程序中使用以下最少代码时,我收到两个完全相反的警告。

\n
int main()\n{\n    unsigned char op1 = 0x1;\n    unsigned char op2 = 0x3;\n    unsigned char result1 = op1 | op2;\n    unsigned char result2 = op1 || op2;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

警告unsigned char result1 = op1 | op2;

\n
\n

lnt-逻辑按位不匹配 当可能需要逻辑“||”时使用按位“|”。

\n
\n

警告unsigned char result2 = op1 || op2;

\n
\n

lnt-逻辑按位不匹配 当可能需要按位“||”时使用逻辑“||”。

\n
\n

这有点好奇。

\n

我的目的是使用按位运算符。我如何更改该行unsigned char result1 = op1 | op2;,以便 Visual\xc2\xa0Studio\xc2\xa02019 警告消失?

\n

该警告不是来自编译器;而是来自编译器。输出没有错误。\n可能它来自ReSharper C++ …

c++ bitwise-operators logical-operators visual-studio

30
推荐指数
1
解决办法
1965
查看次数

如何避免短路评估

我正在使用Ruby on Rails,并希望验证两种不同的模型:

if (model1.valid? && model2.valid?)
...
end
Run Code Online (Sandbox Code Playgroud)

但是,"&&"运算符使用短路评估(即仅当"model1.valid?"为真时才评估"model2.valid?"),这会阻止在model1无效时执行model2.valids.

是否存在不会使用短路评估的等效"&&"?我需要评估两个表达式.

ruby-on-rails operators short-circuiting logical-operators

29
推荐指数
2
解决办法
7517
查看次数

检查"int"类型的"boolean"结果

我正在学习Java,来自C,我发现这种boolean类型的语言之间有一个有趣的区别.在C中没有bool/ ean所以我们需要使用数字类型来表示布尔逻辑(0 == false).

我想在Java中不起作用:

int i = 1;
if (i)
    System.out.println("i is true");
Run Code Online (Sandbox Code Playgroud)

也没有通过类型转换来改变条件:

if ((boolean)i)
Run Code Online (Sandbox Code Playgroud)

除了做以下事情之外:

if ( i != 0 )
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以对int类型进行C-ish逻辑检查吗?只是想知道是否有任何Java技巧允许非布尔类型的布尔逻辑像这样.


编辑:
上面的例子非常简单,并使自己适应狭隘的思维范围.当我最初问这个问题时,我也在考虑函数调用的非布尔返回.例如Linux fork()调用.它本身不会返回int,但我可以很好地使用条件的数字返回值,如:

if( fork() ) {
    // do child code
Run Code Online (Sandbox Code Playgroud)

这允许我处理子项的条件中的代码,而不是为父项处理代码(或者对于错误的负返回结果).

所以我目前还不知道足够的Java给出一个好的"Java"示例,但那是我最初的意图.

java int boolean logical-operators

29
推荐指数
3
解决办法
8万
查看次数

python和/或运算符返回值

我正在观看2007年关于高级Python或理解Python的视频,并且在18'27"发言者声称"有些人可能知道在Python中andor返回两个值中的一个,而not返回总是一个布尔值."这是什么情况下的情况?

据我所知,andor返回布尔.

python operators logical-operators

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

逻辑AND,OR:是否保证从左到右的评估?

是否&& ||保证逻辑运算符()的从左到右的评估?

假设我有这个:

SDL_Event event;

if (SDL_PollEvent(&event)) {
    if (event.type == SDL_QUIT) {
            // do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

这保证与此相同吗?

SDL_Event event;

if (SDL_PollEvent(&event) && event.type == SDL_QUIT) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

这也很重要,假设我们有两个要求,a并且b.因此,要求a更有可能失败b.然后说它if (a && b)比说更有效率if (b && a).

c++ operator-precedence logical-operators

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

处理TRUE,FALSE,NA和NaN

这是一个矢量

a <- c(TRUE, FALSE, FALSE, NA, FALSE, TRUE, NA, FALSE, TRUE)
Run Code Online (Sandbox Code Playgroud)

我想要一个简单的函数,TRUE每当有一个TRUE"a"时返回,并且FALSE每次有一个FALSE或一个NA在"a"中.

以下三件事情无效

a == TRUE
identical(TRUE, a)
isTRUE(a)
Run Code Online (Sandbox Code Playgroud)

这是一个解决方案

a[-which(is.na(a))]
Run Code Online (Sandbox Code Playgroud)

但它似乎不是一个简单易行的解决方案

还有其他解决方案吗?

以下是我所知道的一些函数(和运算符):

identical()
isTRUE()
is.na()
na.rm()
&
|
!
Run Code Online (Sandbox Code Playgroud)
  • 有什么其他功能(运营商,技巧,什么的,......),它们处理非常有用TRUE,FALSE,NA,NaN

  • NA和之间有什么区别NaN

  • 是否有其他"顺理成章之事"比TRUE,FALSE,NANaN

非常感谢 !

boolean r logical-operators r-faq na

26
推荐指数
5
解决办法
4万
查看次数

用于"AND NOT"操作的正则表达式

我正在寻找一个通用的正则表达式构造来匹配模式中的所有内容x EXCEPT匹配模式y.这很难完全和简洁地解释......请参阅Material Nonimplication以获得正式定义.

例如,匹配任何单词字符(\w)除了'p'.注意我从一个较大的集合(所有单词字符)中减去一个小集合(字母'p').我不能只是说,[^p]因为这没有考虑到只有单词字符的更大限制集.对于这个小例子,当然,我可以手动重建类似的东西[a-oq-zA-OQ-Z0-9_],这是一种痛苦但可行的.但我正在寻找一个更通用的结构,以便至少大的正集可以是一个更复杂的表达式.喜欢匹配,((?<=(so|me|^))big(com?pl{1,3}ex([pA]t{2}ern)除非它以"我的"开头.

编辑:我意识到这是一个不好的例子,因为在开始或结束时排除东西是负面前瞻和后视表达式工作的情况.(波希米亚人,我仍然给你一个赞成说明这一点).那么......在中间的某个地方排除包含"我的"的匹配怎么样?...我仍然在寻找一个通用的构造,就像一个正则表达式相当于下面的伪sql

select [captures] from [input]
where (
    input MATCHES [pattern1]
    AND NOT capture MATCHES [pattern2]
)
Run Code Online (Sandbox Code Playgroud)

如果答案是"它不存在,这就是为什么......"我也想知道这一点.

编辑2:如果我想定义自己的函数来执行此操作,那就像(这里是C#LINQ版本):

public static Match[] RegexMNI(string input, 
                               string positivePattern, 
                               string negativePattern) {
    return (from Match m in Regex.Matches(input, positivePattern)
            where !Regex.IsMatch(m.Value, negativePattern)
            select m).ToArray();
}
Run Code Online (Sandbox Code Playgroud)

我仍然只是想知道是否有一个本机正则表达式构造可以做到这一点.

regex logical-operators

25
推荐指数
3
解决办法
5万
查看次数

A == 0真的比~A好吗?

问题设置简介

我在做一些涉及基准- ~AA==0double array with no NaNs,两者都转换A为逻辑阵列,所有zeros被转换为true值和休息被设置为false值.

对于基准测试,我使用了三组输入数据 -

  • 从小到小的数据 - 15:5:100
  • 中小型数据 - 50:40:1000
  • 中型到大型数据 - 200:400:3800

输入是使用A = round(rand(N)*20),其中N是从size数组中获取的参数.因此,N会从变化15 to 100 with stepsize of 5为所述第一组和类似地对于第二和第三组.请注意,我将datasize定义为N,因此元素的数量将是datasize ^ 2或N ^ 2.

基准代码

N_arr = 15:5:100; %// for very small to small sized input array
N_arr = 50:40:1000; %// for small to medium sized input array
N_arr = 200:400:3800; %// for medium …
Run Code Online (Sandbox Code Playgroud)

arrays performance benchmarking matlab logical-operators

25
推荐指数
1
解决办法
771
查看次数