很抱歉,如果这是一个"逻辑运营商101"的问题.我一直盯着我的屏幕看了15分钟试图绕着它绕过它,但我被卡住了.
是否有更简洁/更优雅的方式来表达以下内容(这是JavaScript语法,但它不是一个与语言相关的问题):
if (!something && !something_else) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
基于一些实验,这似乎不是逻辑上的等价物:
if (!(something && something_else) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
此外,任何人都可以推荐一个在线资源,以进一步研究这些问题吗?我假设这类事物在计算机科学课程中被抽象化了,这是我编程知识中的一个重要缺口,我真的很想填写.谢谢!
我有一些看起来像的逻辑
if(a){
if(b){
if(c){
//do something
}else{
//do something
}
}else{
if(c){
//do something
}else{
//do something
}
}else{
if(b){
if(c){
//do something
}else{
//do something
}
}else{
if(c){
//do something
}else{
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
将此实现为可读逻辑的最佳方法是什么?我不想做一些大的OOP手术让它可读,因为做的事情只是一个衬垫.感谢C/C++中的解决方案
我该怎么用?还是有特殊的场合我应该使用一个而不是另一个?
boolean-logic boolean boolean-expression boolean-operations karnaugh-map
如果三个布尔值中至少有两个是真的,这是最容易找到的方法:
BOOL a, b, c;
-(BOOL)checkAtLeastTwo
{
return a && (b || c) || (b && c);
}
Run Code Online (Sandbox Code Playgroud)
如果有10个布尔并且其中至少有两个需要是真的,那么最佳解决方案是什么?提前致谢.
我有点旗帜,其中:
A = 1 (0001)
B = 2 (0010)
C = 4 (0100)
D = 8 (1000)
Run Code Online (Sandbox Code Playgroud)
我想在我的旗帜中设置A和C位:flag = A | C
现在我的旗帜是5(0101).
我需要从flag中删除C位.我怎样才能做到这一点?
我编写了一个函数来比较客户端当前拥有的文件版本和服务器上文件的最新版本.客户端将"quad"(Major.Minor.Build.Private)版本号作为字符串传递给服务器,然后服务器使用FileVersionInfo:
// clientFileVersion will be in "quad" format, a la "3.1.4.1"
private bool ServerFileIsNewer(string clientFileVersion, FileVersionInfo serverFile)
{
// Don't say I never learned nuthin' from Steve McConnell
const int MAJOR_INDEX = 0;
const int MINOR_INDEX = 1;
const int BUILD_INDEX = 2;
const int PRIVATE_INDEX = 3;
string[] versionStrArray = clientFileVersion.Split('.');
int FileMajorPartClient;
Int32.TryParse(versionStrArray[MAJOR_INDEX], out FileMajorPartClient);
int FileMinorPartClient;
Int32.TryParse(versionStrArray[MINOR_INDEX], out FileMinorPartClient);
int FileBuildPartClient;
Int32.TryParse(versionStrArray[BUILD_INDEX], out FileBuildPartClient);
int FilePrivatePartClient;
Int32.TryParse(versionStrArray[PRIVATE_INDEX], out FilePrivatePartClient);
int FileMajorPartServer = serverFile.FileMajorPart;
int FileMinorPartServer = serverFile.FileMinorPart; …
Run Code Online (Sandbox Code Playgroud) 我是相对较新的haskell,我刚刚学习了Applicative Functors,我只使用仿函数和布尔函数为xor创建了这个代码.我想知道你们是否可以用仿函数提出一个更短的解决方案(我确信存在).
xor :: Bool->Bool->Bool
xor=(<$>) (not<$>) ((<*>).((((not<$>)<$>(&&))<$>)<$>((not<$>)<$>(&&)))<*>(||))
Run Code Online (Sandbox Code Playgroud)
我知道这可能不是很好的做法; 对我来说这更像是一个脑筋急转弯.
PS我希望这是允许的
重构一些旧代码,我发现了以下内容:
someVar == !otherVar
Run Code Online (Sandbox Code Playgroud)
这看起来并不清晰,我认为可以写成:
someVar != otherVar
Run Code Online (Sandbox Code Playgroud)
这样做似乎是合乎逻辑的.但是,由于这是Javascript,我担心附带问题,所以这真的没问题吗?
我正在处理创建列表的代码,然后应用"或"和"和"条件来执行进一步操作:
a= ["john", "carlos", "22", "70"]
if (("qjohn" or "carlos") in a) and (("272" or "70") in a):
print "true"
else:
print "not true"
Run Code Online (Sandbox Code Playgroud)
输出:
not true
Run Code Online (Sandbox Code Playgroud)
当我这样做:
a= ["john", "carlos", "22", "70"]
if ("qjohn" or "cdarlos" in a) and ("272" or "d70" in a):
print "true"
else:
print "not true"
Run Code Online (Sandbox Code Playgroud)
输出是 "true"
我没有得到的**carlos and 70**
应该是真实的,但它打印"不真实".这个错误的原因是什么?谢谢
据我所知,在Javascript中伪造的值之后不会执行表达式。例如下面的语句:
const result = undefined && 5;
console.log(result);
Run Code Online (Sandbox Code Playgroud)
result
将是不确定的。
然而:
const result = false && false ? 'T' : 'F';
console.log(result);
Run Code Online (Sandbox Code Playgroud)
result
将等于F
。为什么仍然执行三元表达式?
boolean-logic ×10
logic ×4
boolean ×3
javascript ×2
applicative ×1
c ×1
c# ×1
c++ ×1
conditional ×1
functor ×1
haskell ×1
karnaugh-map ×1
list ×1
math ×1
nested-if ×1
python ×1