C++ 中的算法与按位运算符
Algorithm in c++ with bitwise operators
我的教授分配了下周的这项任务。您必须创建变量,并在一个表达式中创建一个算法,在计算给定的 x、y、z 时给出 1(真),并且在 x、y、z 的每个其他状态下,结果为 0。仅使用按位运算符(| , &).
x = 1
y = 0
z = 0
result 1
x = 0
y = 1
z = 0
result 1
x = 0
y = 1
z = 1
result 1
其他一切都应为 0(假)!我们不应该使用任何函数、循环、开关或其他任何东西。只需 1 行表达式。
他说我们应该使用 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 个结果:
- 你
&
将所有位变量一起设为 1(not
任何 0 使它们与 ~
一起成为 1)。
- 然后
|
这些组在一起。
- 可选择将此通用解决方案重构为更简单的形式。
这不仅会为所有给定的 1 个结果提供 1 个结果,还会为所有其他组合提供 0 个结果。
因此在这种情况下(未优化的)按位表达式是:
(x & ~y & ~z) | (~x & y & ~z) | (~x & y & z)
这被称为 Karnaugh Map,不仅广泛用于位操作,而且还用作任何类型数据的通用布尔过滤器。
我的教授分配了下周的这项任务。您必须创建变量,并在一个表达式中创建一个算法,在计算给定的 x、y、z 时给出 1(真),并且在 x、y、z 的每个其他状态下,结果为 0。仅使用按位运算符(| , &).
x = 1
y = 0
z = 0
result 1
x = 0
y = 1
z = 0
result 1
x = 0
y = 1
z = 1
result 1
其他一切都应为 0(假)!我们不应该使用任何函数、循环、开关或其他任何东西。只需 1 行表达式。 他说我们应该使用 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 个结果:
- 你
&
将所有位变量一起设为 1(not
任何 0 使它们与~
一起成为 1)。 - 然后
|
这些组在一起。 - 可选择将此通用解决方案重构为更简单的形式。
这不仅会为所有给定的 1 个结果提供 1 个结果,还会为所有其他组合提供 0 个结果。
因此在这种情况下(未优化的)按位表达式是:
(x & ~y & ~z) | (~x & y & ~z) | (~x & y & z)
这被称为 Karnaugh Map,不仅广泛用于位操作,而且还用作任何类型数据的通用布尔过滤器。