擅长:python、mysql、java
<p>您可以使用位运算符来测试进程的不同组合:</p>
<pre><code>def foo1():
print("foo1()")
def foo2():
print("foo2()")
def foo3():
print("foo3()")
def foo4():
print("foo4()")
def input(n):
if n & (1 << 0) != 0: # (1 << 0) == 1
foo1()
if n & (1 << 1) != 0: # (1 << 1) == 2
foo2()
if n & (1 << 2) != 0: # (1 << 2) == 4
foo3()
if n & (1 << 3) != 0: # (1 << 3) == 8
foo4()
</code></pre>
<p>在这个例子中,从1到15的所有数字都会给出一些输出。
1将打印“foo1()”
4将打印“foo3()”
...
如果要打印“foo1()”和“foo3()”,则应使用参数5(1+4)调用input()</p>
<p>理解这一点的关键是要注意,每个函数fooX的调用基数为2:</p>
<p>n=1<sub>10</sub>=0001<sub>2</sub>->;foo1()<br/>
n=2<sub>10</sub>=0010<sub>2</sub>->;foo2()<br/>
n=4<sub>10</sub>=0100<sub>2</sub>->;foo3()<br/>
n=8<sub>10</sub>=1000<sub>2</sub>->;foo4()<br/></p>
<p>它们的和只是一个布尔运算<code>or</code>(<code>|</code>)位到位的运算:</p>
<p>(1+4)<sub>10</sub>=0001<sub>2</sub>0100<sub>2</sub>=0101<sub>2</sub>=5<sub>10</sub></p>
<p>然后用<code>&</code>(按位<code>and</code>)运算符将给定位设置为1,并调用相应的<code>fooX()</code>。在</p>