C++ c++;使用位运算符

C++ c++;使用位运算符,c++,algorithm,bit-manipulation,boolean-expression,C++,Algorithm,Bit Manipulation,Boolean Expression,我的教授把这项任务安排在下周。您必须创建变量,并在一个表达式中生成一个算法,当计算给定的x,y,z时,该算法给出1(true),并且在x,y,z的其他状态下,结果为0。仅使用位运算符(|,&) 其他所有内容都应为0(false)!我们不应该使用任何函数、循环、开关或其他任何东西。只有一行表达。 他说我们应该使用9个变量和8个运算,所以我猜算法应该是这样的: (xOyOz) O (xOyOz) O (xOyOz) 这将给出9个变量3*x,3*y,3*z和8个操作8*O(以下其中一个应位于此处|,

我的教授把这项任务安排在下周。您必须创建变量,并在一个表达式中生成一个算法,当计算给定的x,y,z时,该算法给出1(true),并且在x,y,z的其他状态下,结果为0。仅使用位运算符(|,&)

其他所有内容都应为0(false)!我们不应该使用任何函数、循环、开关或其他任何东西。只有一行表达。 他说我们应该使用9个变量和8个运算,所以我猜算法应该是这样的:

(xOyOz) O (xOyOz) O (xOyOz)
这将给出9个变量
3*x
3*y
3*z
和8个操作
8*O
(以下其中一个应位于此处|,&)

您可以使用^(XOR)运算符

((x^y)&(x^z))|(y&(x^y)&(y^z))

这就是9个变量和8个运算的例子。基本思想是,对于每一个结果:

  • 您将所有位变量
    &
    组合为1(
    任何0,以
    ~
    将它们设为1)
  • 然后
    |
    将这些组放在一起
  • 可以选择将此通用解决方案重构为更简单的形式
  • 这不仅为所有给定的1结果提供了1结果,而且为每一个其他组合提供了0结果

    因此,这种情况下的(未优化)逐位表达式为:

    (x & ~y & ~z) | (~x & y & ~z) | (~x & y & z)
    

    这被称为a,不仅广泛用于位操作,而且还用作任何类型数据的通用布尔过滤器。

    您需要使用a,这应该是一项艰巨的任务。首先,应该如何区分
    x=3
    x=1
    ?@MikeCAT那么这个问题一定有问题。你能检查一下问题/教授,确保你有所有的部分吗?对那些感到困惑的人有一点澄清:想象一下,你必须编写一个算法,结果总是返回0(false),但只有在三种给定的情况下,结果是1(true)。情况如下:x=1,y=0,z=0结果=1;x=0,y=1,z=0结果=1;x=0,y=1,z=1结果=1;代码应该是这样的:((x | y)&z)|(x&(y | z))&(x |(y&z))&(x |(y&z)),但这不是正确的代码,除了上述三种状态外,在所有情况下都应该是类似的返回0(false)。简单的解决方案是((x&z)^y)。感谢您的帮助!非常感谢!同样,您没有指定not运算符是有效的运算符。你的问题仍然无效。我的解决方案可能是你的教授问你的。毫无疑问,它的形式错误(不是(xOyOz)O(xOyOz)O(xOyOz)O(xOyOz)),在只允许和/或的情况下使用XOR,并且没有给出一个通用算法,正如我在问题中所做的那样,没有关于这种格式的文字。我假设defnotme忘记了^bitwise运算符,而它是有效的bitwise运算符。你正在使用的~被告知不要使用它。所以要么^被遗忘了,这个问题是一个令人毛骨悚然的难题,要么~~是变量上允许的东西,不算作一个运算,教授在学习卡诺图,这是一门普世安全的课程。这个问题不够精确。使用xor同样简单。
    (x & ~y & ~z) | (~x & y & ~z) | (~x & y & z)