One Bad Ternary Operator Deserves Another Today's Daily WTF quotes the following line of code...

FailSafe==0?'No technical alarms':((FailSafe&amp;1)!=0&amp;&amp;(FailSafe&amp;2)!=0&amp;&amp;(FailSafe&amp;4)!=0&amp;&amp;(FailSafe&amp;8)!=0?'Detection zones staying in a given state; Bad visibility;
Initialization; Bad configuration':((FailSafe&amp;1)!=0&amp;&amp;(FailSafe&amp;2)!=0&amp;&amp;(FailSafe&amp;4)!=0?'Detection zones staying in a given state; Bad visibility; Initialization':
((FailSafe&amp;1)!=0&amp;&amp;(FailSafe&amp;2)!=0&amp;&amp;(FailSafe&amp;8)!=0?'Detection zones staying in a given state; Bad visibility; Bad configuration':((FailSafe&amp;1)!=0&amp;&amp;(FailSafe&amp;4)!=0&amp;&amp;
(FailSafe&amp;8)!=0?'Detection zones staying in a given state; Initialization; Bad configuration':((FailSafe&amp;2)!=0&amp;&amp;(FailSafe&amp;4)!=0&amp;&amp;(FailSafe&amp;8)!=0?'Bad visibility;
Initialization; Bad configuration':((FailSafe&amp;1)!=0&amp;&amp;(FailSafe&amp;2)!=0?'Detection zones staying in a given state; Bad visibility':((FailSafe&amp;1)!=0&amp;&amp;(FailSafe&amp;4)!=0?'Detection 
zones staying in a given state; Initialization':((FailSafe&amp;1)!=0&amp;&amp;(FailSafe&amp;8)!=0?'Detection zones staying in a given state; Bad configuration':((FailSafe&amp;2)!=0&amp;&amp;
(FailSafe&amp;4)!=0?'Bad visibility; Initialization':((FailSafe&amp;2)!=0&amp;&amp;(FailSafe&amp;8)!=0?'Bad visibility; Bad configuration':((FailSafe&amp;4)!=0&amp;&amp;(FailSafe&amp;8)!=0?'Initialization; Bad 
configuration':((FailSafe&amp;1)!=0?'Detection zones staying in a given state':((FailSafe&amp;2)!=0?'Bad visibility':((FailSafe&amp;4)!=0?'Initialization':((FailSafe&amp;8)!=0?'Bad 
configuration':'Unknown')))))))))))))))


Write some code that takes an integer value named FailSafe and returns the same string that the above code would produce from the same integer value.


The challenge is to rewrite that line, so "boilerplate" code is free, including any code that loads an integer value and outputs the string. Only the code that performs the above transformation from an integer to a string counts.
You may use a different name to "FailSafe" if you wish, as long as your chosen identifier has the same golf score.
No calling external resources to perform the lookup.
Normal code-golf rules apply.
Ruby, 210 characters
Similar to @Jan Dvorak's solution but a bit more functional and a bit shorter.
f=FailSafe
e=[f&amp;1,f&amp;2,f&amp;4,f&amp;8,1-f].zip([&quot;Detection zones staying in a given state&quot;,&quot;Bad visibility&quot;,&quot;Initialization&quot;,&quot;Bad configuration&quot;,&quot;No technical alarms&quot;]).map{|a,b|a&gt;0&amp;&amp;b}-[!0]
e[0]||=&quot;Unknown&quot;
e.join&quot;; &quot;