c - 我对这个 if 语句的否定是否正确?

标签 c if-statement

我目前正在处理一些具有此 if 语句的遗留代码:

if(c == 30 || c == 3 || c == 4 || r == 'Y' || t == 'X' ||( s>= 50000 && s <= 50999))
{
  //do nothing
}
else
{
  function1();
}

我试图通过否定 if 来消除不必要的“什么都不做”,但我不确定如何处理“s”部分:

if((c != 30 && c != 3 && c != 4 && r != 'Y' && t != 'X') ...what goes here?...)
{
   function1();
}

我都试过了 && (s >= 50000 || s <= 50999)||(s < 50000 && s > 50999)但是那些没有通过我运行的测试用例。当我尝试 &&( s < 50000 || s > 50999))我所有的测试用例都成功了,但我知道我不能测试所有的东西,所以我希望对逻辑否定有更强把握的人可以肯定地告诉我这是否正确。

最佳答案

如果你有这样的逻辑表达式

expr1 || expr2

然后它的否定

!( expr1 || expr2 )

等价于tp

!expr1 && !expr2

反之亦然,如果你有这样的表达式

expr1 && expr2

然后它的否定

!( expr1 && expr2 )

相当于

!expr1 || !expr2

所以要否定这个表达式

c == 30 || c == 3 || c == 4 || r == 'Y' || t == 'X' ||( s>= 50000 && s <= 50999)

喜欢

!( c == 30 || c == 3 || c == 4 || r == 'Y' || t == 'X' ||( s>= 50000 && s <= 50999))

我们会得到

!( c == 30 )&& !( c == 3 ) && !( c == 4 ) && !( r == 'Y' ) && !(t == 'X' ) && !( s>= 50000 && s <= 50999)

然后

c != 30 && c != 3 && c != 4 && r != 'Y'&& t != 'X' && ( !( s>= 50000 ) || !( s <= 50999))

最后

c != 30 && c != 3 && c != 4 && r != 'Y'&& t != 'X' && ( s < 50000 || s > 50999 )

关于c - 我对这个 if 语句的否定是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57963679/

相关文章:

c - 在 C 中的链表的末尾添加一个新节点

php - 什么是 'module_number' 作为 zend_register_list_destructors_ex 的参数

c++ - 如何使用c++编写一个在系统中显示蜂鸣声的程序

c - 为什么这种奇怪的内存分配行为

php - 用PHP检查IE不好吗

r - 使用for循环返回变量名-R中的变量均值

Java Nested Ifs - 可以通过编码最佳实践来解决吗?

c - 即使在程序执行后仍显示段错误

if-statement - 为什么一个变量与多个值的不相等检查总是返回 true?

Django {% with %} 标签在 {% if %} {% else %} 标签内?