java - 得到另一个结果的数字?

标签 java algorithm math numbers

在巴西,一些公共(public)考试使用这种替代系统:

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

TOTAL: [___]

这样,学生必须添加他们想要标记的选项的值,并提示总数。备选方案的值由 2^(alternative_number - 1) 定义。所以,备选方案1的值为1,备选方案2的值为2,备选方案3的值为4,等等。

那么,我怎样才能得到构建总数的值呢?

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

最佳答案

您可以将可能的备选方案解释为位掩码,并使用 &(具有“总计”值的按位 and 运算符来测试是否选择了一个备选方案:

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

关于java - 得到另一个结果的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23986514/

相关文章:

java gwt 细胞树

c - 数学。排序。 "n * (n + 1)/2"总是小于 "n * n"吗?

java - 除以减法 - 将余数除以减法?

java - HashMap返回NULL时如何处理异常

java - 特定数字的嵌套循环

c++ - SORT 整数数组 TAG 结构数组(或两个)

algorithm - 使用迭代方法求解递归关系

c# - 给定当前角度和目标位置计算目标角度?

java - 每当发生异常时,我们应该记录堆栈跟踪吗?

java - 找到一个模式,这样我就可以通过不重复计算来改进排列算法