标签: boolean-logic

使用 && 和 || 时违反 MISRA 12.5 在 if 语句中

我正在开发一个应用 MISRA 2004 的项目。

对于大多数违规行为,我都找到了原因,但有一个我不明白:

它在 if 语句中带有&&||操作。

例子:

uint8 getValue()
{
   // Some algorithm, simplified with return 1
   uint8 someValue = 1u;
   return someValue;
}
int main(int argc, char *argv[]) {
    uint8 currentState = 0u;
    uint8 var_a = getValue();
    uint8 var_b = getValue();
    uint8 var_c = getValue();
    uint8 var_d = getValue();

    const uint8 const_a = 1u;
    const uint8 const_b = 2u;
    const uint8 const_c1 = 3u;
    const uint8 const_c2 = 30u;
    const uint8 const_d = …
Run Code Online (Sandbox Code Playgroud)

c boolean-logic if-statement misra

7
推荐指数
1
解决办法
835
查看次数

C#如何检查两个值中的一个是否为TRUE?

对于这里的C#专家来说应该是一个简单的问题.

我基本上想要检查一个值或另一个值是否为TRUE,代码的狂野刺戳如下:

if ((Boolean.Parse(staff.getValue("Male")) | Boolean.Parse(staff.getValue("Female")))    
{   
   // is true
}
Run Code Online (Sandbox Code Playgroud)

它是否正确?

谢谢

c# boolean-logic

6
推荐指数
3
解决办法
9259
查看次数

评估 PHP 中以字符串形式给出的逻辑表达式

我有一个具有 state 属性的对象,例如state = 'state4'state = 'state2'

现在我还有一个包含 state 属性可以获得的所有可用状态的数组,state1state8注意:这些状态没有命名为 stateN。它们有八个不同的名称,例如 payment 或 Canceled。我只是用 stateN 来描述问题) 。

除此之外,我还有一个逻辑表达式,例如$expression = !state1||state4&&(!state2||state5)。这是上述描述的代码:

$state = 'state4';
$expression = '!state1||state4&&(!state2||state5)';
Run Code Online (Sandbox Code Playgroud)

现在我想检查逻辑表达式是真还是假。在上面的例子中,确实如此。在以下情况下它将是错误的:

$state = 'state1';
$expression = state4&&!state2||(!state1||state7);
Run Code Online (Sandbox Code Playgroud)

如何以优雅的方式解决这个问题?

php boolean-logic

6
推荐指数
1
解决办法
4250
查看次数

为什么JavaScript按位或奇怪地表现?

在JavaScript中,似乎:

(4294958077 | 0) == -9219
Run Code Online (Sandbox Code Playgroud)

为什么不是4294958077?

它表明存在某种溢出(虽然我理解它的JavaScript数字类型的范围是+/- 9007199254740992,所以这本身就是奇怪的.)

即使它是溢出,肯定

(4294958077 | 0) == 4294958077
Run Code Online (Sandbox Code Playgroud)

应该评价为真 - 但事实并非如此.

请帮忙

javascript types boolean-logic

6
推荐指数
1
解决办法
438
查看次数

Python逻辑表达式中的奇怪转换

我注意到Python 2.7逻辑表达式的奇怪行为:

>>> 0 and False
0
>>> False and 0
False
>>> 1 and False
False
>>> False and 1
False

并用True代替False

>>> 0 and True
0
>>> True and 0
0
>>> 1 and True
True
>>> True and 1
1

Python将逻辑语句转换为整数时是否有任何规则?为什么有时会显示0为假,1为真?

更重要的是,为什么会归还这个?

>>>"test" or "test"
'test'

python evaluation boolean-logic python-2.7

6
推荐指数
1
解决办法
184
查看次数

GLSL/HLSL - 与单个块相对的多个单行条件语句

对抗锯齿方法做了一些研究,我偶然发现了这段代码(从Nvidia的FXAA着色器中抓取):

if(!pairN) lumaN = lumaS;
if(!pairN) gradientN = gradientS;
if(!pairN) lengthSign *= -1.0;
Run Code Online (Sandbox Code Playgroud)

是不是有一个很好的理由不是作为以下内容写的?

if (!pairN) {
    lumaN = lumaS;
    gradientN = gradientS;
    lengthSign *= -1.0;
}
Run Code Online (Sandbox Code Playgroud)

我认为这是某种优化?看起来真的违反直觉......

opengl boolean-logic gpu glsl hlsl

6
推荐指数
1
解决办法
1441
查看次数

是'或'在赋值pythonic的右侧使用?

情况

(注意:以下情况仅仅是示例性的.这个问题适用于任何可以评估为bool的事情)

如果用户未提供自定义列表,则应使用默认列表:

default_list = ...
custom_list = ...
if custom_list:
    list = custom_list
else:
    list = default_list
Run Code Online (Sandbox Code Playgroud)

你可以缩短到:

default_list = ...
custom_list = ...
list = custom_list if custom_list else default_list
Run Code Online (Sandbox Code Playgroud)

现在,根据https://docs.python.org/2.7/reference/expressions.html#or ...

表达式x or y首先评估x; 如果x,则返回其值; 否则,将评估y并返回结果值.

...,or不返回布尔值,而是返回布尔转换不为false的第一个值.因此,以下是有效的代码:

list = custom_list or default_list
Run Code Online (Sandbox Code Playgroud)

这与C#Null Coalescing运算符类似,不同之处在于它应该作为False Coalescing Operator在Python中重新生成,它返回第一个非false参数.

最后一个例子似乎更容易阅读,但它被认为是pythonic?

无论PEP8(程序),也不pylint的不抱怨.

python boolean-logic coding-style conditional-operator language-lawyer

6
推荐指数
2
解决办法
290
查看次数

评估在 JavaScript 中给出布尔表达式的字符串

我有一个包含布尔逻辑的字符串,例如:

var test = "(true)&&(false)&&!(true||true)"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,在 JavaScript 中评估此字符串以获取 false 的布尔值的好方法是什么

  1. 我知道我们可以使用 eval() 或 new Function() .. - 但这是一种安全的方法吗?
  2. 我猜另一种选择是编写自定义解析器。作为一个对 JS 相当陌生的人,这需要很多努力吗?我找不到任何用于布尔逻辑表达式的解析器示例
  3. 还有其他选择吗?

javascript boolean-logic eval

6
推荐指数
1
解决办法
4566
查看次数

降低R中的中缀运算符优先级?

我正在尝试为 R 中的逻辑变量创建一个“隐含”运算符,以使命题演算更容易。但是,它似乎与否定运算符一起玩得并不好。正如此处的最后 4 行所示,我必须将取反变量括在括号中才能使蕴涵运算符正常工作。

我怀疑运算符优先级是问题,但我不确定。从我读到的内容来看,没有办法改变中缀运算符的优先级。有没有一种方法可以重新定义,implies()以便(!q) %->% (!p)不需要括号?

> implies <- function(p, q) !p | q
> "%->%" <- implies
> 
> p <- c(TRUE, TRUE, FALSE, FALSE)
> q <- c(TRUE, FALSE, TRUE, FALSE)
> p %->% q
[1]  TRUE FALSE  TRUE  TRUE
> !q %->% !p
[1]  TRUE FALSE FALSE FALSE
> (!q) %->% !p
[1]  TRUE FALSE  TRUE  TRUE
Run Code Online (Sandbox Code Playgroud)

boolean-logic r logical-operators propositional-calculus

6
推荐指数
1
解决办法
166
查看次数

为什么在 C++ 中 (0 &lt; 5 &lt; 2) 结果为真?

下面的代码std::cout << (0 < 5 < 2);输出1(true) 到控制台,即使从数学上讲,它5 < 2是假的。这背后的逻辑是什么?

假设:这是因为0 < 5计算为 1,因此0 < 5 < 2计算为1 < 2。我对么?

c++ math boolean-logic boolean

6
推荐指数
1
解决办法
94
查看次数