得到另一个产生的数字?

时间:2014-06-02 02:20:23

标签: java algorithm math numbers

在巴西,一些公开考试使用这种替代系统:

01 - Alternative bla
02 - Alternative omg
04 - Alternative god
08 - Alternative hey

TOTAL: [___]

这样,学生必须add来自他们想要标记的替代值的值,并在total number中提示。备选方案的值由2^(alternative_number - 1)定义。因此,备选方案1的值为1,备选方案2的值为2,备选方案3的值为4,等等。

那么,我怎样才能得到builded总数的值?

例如,我有23。这个数字是通过添加16 + 04 + 02 + 01来构建的。

1 个答案:

答案 0 :(得分:3)

您可以将可能的替代方法解释为位掩码,并使用&,逐位and运算符,使用" total"测试是否选择了一个替代方案的价值:

if ((total &  1) != 0)
    System.out.println("Alternative 01 was selected");
if ((total &  2) != 0)
    System.out.println("Alternative 02 was selected");
if ((total &  4) != 0)
    System.out.println("Alternative 04 was selected");
if ((total &  8) != 0)
    System.out.println("Alternative 08 was selected");
if ((total & 16) != 0)
    System.out.println("Alternative 16 was selected");

上述代码会告诉您选择了12416。为了可视化发生的事情,让我们将总值转换为二进制表示,以便23成为:

  10111 // 23

让我们依次应用每个位掩码:

  10111 // 23
& 00001 //  1
-------
  00001 //  1 was selected

上面告诉我们实际上选择了1选项。与其他人类似:

  10111 // 23
& 00010 //  2
-------
  00010 //  2 was selected

  10111 // 23
& 00100 //  4
-------
  00100 //  4 was selected

  10111 // 23
& 01000 //  8
-------
  00000 //  8 was NOT selected

  10111 // 23
& 10000 // 16
-------
  10000 // 16 was selected