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