C++ 如何检查三个值是否均为0或均为1

C++ 如何检查三个值是否均为0或均为1,c++,C++,有3个整型变量的值可以是0或1。如果全部为0或全部为1,则打印特定语句。对于所有其他值组合,打印另一条语句 我尝试了以下有效的方法。有没有更好的方法来编写if语句 #include <iostream> using namespace std; int main() { int a, b, c; cin >> a >> b >> c; if(!(a != 0 && b != 0 && c

有3个整型变量的值可以是0或1。如果全部为0或全部为1,则打印特定语句。对于所有其他值组合,打印另一条语句

我尝试了以下有效的方法。有没有更好的方法来编写if语句

#include <iostream>
using namespace std;

int main()
{
    int a, b, c;
    cin >> a >> b >> c;

    if(!(a != 0 && b != 0 && c != 0) && !(a == 0 && b == 0 && c == 0))
    {
        cout << "a, b or c have mixed values of 1 and 0" << endl;
    }
    else
    {
        cout << "All of a, b and c are either 1 or 0" << endl;
    }

    system("pause");
    return 0;
}
#包括
使用名称空间std;
int main()
{
INTA、b、c;
cin>>a>>b>>c;
如果(!(a!=0&&b!=0&&c!=0)和(!(a==0&&b==0&&c==0))
{

cout在代码中,用户输入的值没有限制

如果只想查看所有值是否彼此相等,可以执行以下操作:

if (a == b && b == c)
{
    cout << "A, B, and C are all equal" << endl;
}
else 
{
    cout << "A, B, and C contain different values" << endl;
}
if(a==b&&b==c)
{
不能包含
使用名称空间std;
int main()
{
INTA=10,b=10,c=10;
cin>>a>>b>>c;
如果((a==0&&b==0&&c==0)| |(a==1&&b==1&&c==1))
{
如果((b!=c)| |(a^b))
{   

std::cout一个更通用的解决方案:
~(~(A^b)^c)
。基于
A XNOR b
确保两者都是零或一的想法。

如果您使用的是c++11,您可以通过可变模板实现所需的功能,例如:

template <typename T, typename U>
bool allequal(const T &t, const U &u) {
    return t == u;
}

template <typename T, typename U, typename... Args>
bool allequal(const T &t, const U &u, Args const &... args) {
    return (t == u) && allequal(u, args...);
}
模板
布尔·阿勒夸尔(康斯特T&T、康斯特U&U){
返回t==u;
}
模板
布尔·阿勒夸尔(常量T&T、常量U&U、参数常量和…参数){
返回(t==u)和&allequal(u,args…);
}
您可以在代码中这样调用它:

if (allequal(a,b,c,0) || allequal(a,b,c,1))
{
  cout << "All of a, b and c are either 1 or 0" << endl;
}
if(allequal(a,b,c,0)| allequal(a,b,c,1))
{

cout
cin.get()
将在捕获值的输入行末尾使用回车符。您需要另一个回车符来捕获第二个CR。只需从命令窗口/终端运行它即可。您的问题涉及整数变量,所有变量都可以有值0或1。这是否意味着,它们只能是0或1?如果是,为什么在你的代码中用10来标记它们?如果我理解你最近的编辑,它们实际上可以有0或1以外的值,对吗?@jogojapan代码可以接受a、b和c的任何值,因为没有验证。为了简单起见,我跳过了它。让我们假设用户只输入1或0。如果这是假设,“检查它们是否都是0或都是1”与“检查它们是否都相等”相同。这是不正确的,因为&是按位的,变量不是布尔值。实际上,这是正确的,因为OP说a、b和c只能有0或1。@MatthewLundberg只要所有值都是0或1,它就可以工作。@MatthewLundberg1@MatthewLundberg-位运算符也适用于整数类型。是否将其与其他编程语言混淆。此状态当每个值的第一位设置为
1
且其中一个值为
0x00000001
时,ent将返回true。例如:
0x00000001&0x11111111&0x00000001==0x00000001
if( (b!=c) || (a ^ b)) 
{   
  std::cout << "a, b or c have mixed values of 1 and 0" << std::endl;
}   
else
{   
  std::cout << "All of a, b and c are either 1 or 0" << std::endl;
}   
if( (a!=0) + (b!=0) - 2 * (c!=0) == 0 )
{
    cout << "All of a, b and c are either 1 or 0" << endl;
}
else
{
    cout << "a, b or c have mixed values of 1 and 0" << endl;
}
template <typename T, typename U>
bool allequal(const T &t, const U &u) {
    return t == u;
}

template <typename T, typename U, typename... Args>
bool allequal(const T &t, const U &u, Args const &... args) {
    return (t == u) && allequal(u, args...);
}
if (allequal(a,b,c,0) || allequal(a,b,c,1))
{
  cout << "All of a, b and c are either 1 or 0" << endl;
}