我目前正在处理一些具有此 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/