【问题标题】:Boolean operator NOR in c++ [duplicate]c ++中的布尔运算符NOR [重复]
【发布时间】:2019-04-09 01:44:40
【问题描述】:

我正在练习所有位的逻辑门实现,然后我开始实现 NOR,但我不知道为什么使用“~”运算符会给出负值。当我使用“!”时,它确实给出了正确的结果操作员。我无法找到我所做的错误背后的逻辑。

我通读了 C++ 中的运算符,并清楚地提到了使用“~”运算符和“!”来稍微反转一下。逻辑运算

void NOR(vector<string>& input){ // input is string of vectors with values 0 0, 0 1, 1 0, 1 1

cout<<"---------------------------------"<<endl;

  for(auto& i : input){

    cout<<"NOR of "<<i[0]<<" "<<i[1];

    cout<<" is "<<~((i[0]-'0') | (i[1]-'0'))<<endl;

  }

 cout<<"---------------------------------"<<endl;

}

我得到的结果是

NOR of 0 0 is -1

NOR of 1 0 is -2

NOR of 0 1 is -2

NOR of 1 1 is -2

【问题讨论】:

  • C++ 的类型为 bool 用于布尔值。 ! 是一个逻辑运算符。使用那些。 0 是一个整数。 ~ 不是逻辑运算符。 ~0 没有做你想做的事。

标签: c++


【解决方案1】:

C++ 没有逻辑异或运算符(只有按位异或:^)。

至于 NOR - C++ 没有实现任何类型的 NOR。

你可以简单地使用:

template <typename I>
constexpr I logical_nor(I lhs, I rhs) noexcept { return not (lhs or rhs); }

template <typename I>
constexpr I bitwise_nor(I lhs, I rhs) noexcept { return ~(lhs | rhs); }

如果您想将其应用于元素向量,您可以使用std::transformstd::for_each

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多