上个星期遇到一个面试问题:
我需要一个函数来打印一个数字是正还是负数,而不使用条件语句,如否否则用于切换a? b:c等我怎么能这样做?
我告诉采访员说这个问题本质上是“有条件的”是不可能的.他告诉我这是可能的,但没有告诉我如何.我做了相当多的搜索,但没有很好的答案.
解决方法
一个可能的解决方案:
String[] responses = {"Positive","Negative"}; System.out.println(responses[(i >> 31) & 1]);
这也算为零为正数.
因为Java中的整数需要存储在two’s complement(或者表现得像它们一样),所以任何负数的最高位为1,而任何其他数字的最高位为0.(i> 31)复制最高位到每隔一个位(所以负数变为11111111 11111111 11111111 11111111,正/零号变为00000000 00000000 00000000 00000000). &安培; 1将除最低位之外的所有位设置为0.组合(i> 31)& 1有效地只读取i的最高位.