在我的Be Prepared Comp Sci 教科书中,我遇到了这个问题:
假设 x、y 和 z 是整数变量,以下三个逻辑表达式中哪一个是等价的,即对于 x、y 和 z 的所有可能值具有相等的值?
(x == y && x != z) || (x != y && x == z)
(x == y || x == z) && (x != y || x != z)
(x == y) != (x == z)
A. None of the three
B. I and II only
C. II and III only
D. I and III only
E. I, II, and III
Run Code Online (Sandbox Code Playgroud)
我选择了“B”,但弄错了。我真的认为我需要帮助理解布尔逻辑。正确答案说的是别的,但我不明白逻辑。以下是正确答案:
表达式 III …
我试图用 39 个输入和大约 5 亿 - 8 亿个术语(如许多 and/not/or 语句中那样)来简化布尔表达式。
\n\n不需要完美的简化,但如果有一个好的简化就更好了。
\n\n我知道 K-maps、Quine\xe2\x80\x93McCluskey、Espresso算法。然而,我也意识到,根据我所读到的内容,这些机制需要很长时间才能简化这种规模的电路。
\n\n我需要在 24 小时内尽可能简化这个表达式。
\n\n经过谷歌搜索后,我发现很难找到任何资源来尝试简化如此规模的机器!是否有任何资源或图书馆可以尝试在 24 小时内至少在某种程度上简化此操作?
\n我有一个带有两个构造函数的类。一为bool一为A*。
struct B
{
explicit B(bool b)
{
std::cout << "B(bool)" << std::endl;
}
explicit B(A*)
{
std::cout << "B(A*)" << std::endl;
}
};
Run Code Online (Sandbox Code Playgroud)
当 B 应该用const A*而不是A*-构造时,const A*将转换为bool.
const A a;
B b(&a);
Run Code Online (Sandbox Code Playgroud)
输出: B(bool)
所需的解决方案是
编译器错误:“B(const A*) 没有有效的构造函数”
我已经尝试过使用explicit关键字,但是没有用。
在学习哈佛大学CS50课程的过程中,有一个问题让我很困惑。下面是困扰我很久的问题。
对于下面的代码,它想将名为“EMMA”的字符串与名为“names”的数组进行比较,其中包含 4 个名称。
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
// An array of names
string names[] = {"EMMA", "RODRIGO", "BRIAN", "DAVID"};
// Search for EMMA
for (int i = 0; i < 4; i++)
{
if (strcmp(names[i], "EMMA") == 0)
{
printf("Found\n");
return 0;
}
}
printf("Not found\n");
return 1;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,它用于if (strcmp(names[i], "EMMA") == 0)检查名称“EMMA”。
然而,它也想如果我像如果我更换另一种方式写代码的运行if (strcmp(names[i], "EMMA") == 0)用if (!strcmp(names[i], "EMMA")),和原来相同的答案“找到”。
如果我没记错的话!,C中的感叹号的意思是“NOT”。在第一种方法中,它使用两个等号来表示与 0 相同的值。但在第二种方法中,它在函数 前面使用感叹号strcmp …
我希望每个人都安全。
我正在学习 Haskell,并发现 Haskell 中的函数没有副作用。我只是想知道在命令式语言中布尔表达式被认为是没有副作用的表达式,因为它们只返回 true 或 false(它们的主要效果)
谢谢!
我知道 C/C++ 使用短路评估来评估布尔表达式。例如,C/C++ 肯定会在表达式中的操作数a之前计算操作数,如果为 false,则不会计算。ba && bab
此外,我知道5==6编译器可能会完全忽略诸如此类的事情,因为它是一个常量表达式,可以在编译时进行评估。
但是不知道b && 0编译器能不能优化?编译器可以说:好吧, 的求值0比 的求值容易得多b,并且b没有任何副作用,所以我决定先更改b && 0为0 && b求值0。
嘿,我有一个错误:
while((Status.health !0) && (Wolves.health !0) )
Run Code Online (Sandbox Code Playgroud)
有人能看出这有什么问题吗?
我试图让这个评估为假.
(False,)
Run Code Online (Sandbox Code Playgroud)
它目前等于true,因为我认为元组不是空的.那么如何将其提取或转换为布尔值呢?谢谢〜
在哈斯克尔,
这很好用:(mod 9) 7.它给出了预期的结果:当9除以7(2)时的余数.
同样,这也有效:(mod 9) 9.它返回0.
这让我觉得(mod 9 == 0) 9应该回归True.然而,事实并非如此:它反而引发了错误.
错误:
<interactive>:62:1: error:
• Couldn't match expected type ‘Integer -> t’
with actual type ‘Bool’
• The function ‘mod 9 == 0’ is applied to one argument,
but its type ‘Bool’ has none
In the expression: (mod 9 == 0) 9
In an equation for ‘it’: it = (mod 9 == 0) 9
• Relevant bindings …Run Code Online (Sandbox Code Playgroud) 首先,对这个非常基本的问题表示歉意。我对stackoverflow还是比较陌生,但是对此我挠头了,希望能有所启发。
好的,所以今天在工作中,我和我的同事的代码经过同行审查,并被要求替换。
Boolean isOpen;
*some processing that involves altering the value of isOpen*
if (!isOpen){
...
}
Run Code Online (Sandbox Code Playgroud)
有了这个..
if (Objects.equals(Boolean.FALSE, isOpen)){
...
}
Run Code Online (Sandbox Code Playgroud)
我知道这两种实现都是正确的,并且产生相同的结果。我也知道使用Boolean对象包装器的后果。
我没有得到的是在这种情况下使用NOT运算符和Objects.equals()之间的区别。我知道在运行时isOpen它将被拆箱。两者仍然容易受到影响,有NullPointerException什么区别?这有点超出了逻辑运算符的目的。