Java 获取导致另一个事件的数字?

Java 获取导致另一个事件的数字?,java,algorithm,math,numbers,Java,Algorithm,Math,Numbers,在巴西,一些公共考试使用这种替代系统: 01 - Alternative bla 02 - Alternative omg 04 - Alternative god 08 - Alternative hey TOTAL: [___] 这样,学生必须添加他们想要标记的备选方案中的值,并在总数中提示。备选方案的值由2^(备选方案编号-1)定义。因此,备选方案1的值为1,备选方案2的值为2,备选方案3的值为4,以此类推 那么,我如何才能得到构建的值总数 例如,我有23。这个数字是通过添加16+04

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

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

TOTAL: [___]
这样,学生必须
添加他们想要标记的备选方案中的值,并在
总数中提示。备选方案的值由
2^(备选方案编号-1)
定义。因此,备选方案1的值为1,备选方案2的值为2,备选方案3的值为4,以此类推

那么,我如何才能得到
构建的值
总数


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

来建立的。您可以将可能的备选方案解释为位掩码,并使用
&
、按位
运算符以及“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");
上述代码将告诉您已选择了
1
2
4
16
。为了可视化正在发生的事情,让我们将总值转换为二进制表示,因此
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

您可以将可能的备选方案解释为位掩码,并使用
&
、位
运算符以及“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");
上述代码将告诉您已选择了
1
2
4
16
。为了可视化正在发生的事情,让我们将总值转换为二进制表示,因此
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

您可以将可能的备选方案解释为位掩码,并使用
&
、位
运算符以及“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");
上述代码将告诉您已选择了
1
2
4
16
。为了可视化正在发生的事情,让我们将总值转换为二进制表示,因此
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

您可以将可能的备选方案解释为位掩码,并使用
&
、位
运算符以及“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");
上述代码将告诉您已选择了
1
2
4
16
。为了可视化正在发生的事情,让我们将总值转换为二进制表示,因此
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

研究如何将数字转换成二进制。1的位置将为您提供“备选方案”的索引。e、 g.23=10111(二进制)。这意味着,从右到左,第1、第2、第3和第5个备选方案用于构建23。请注意将数字转换为二进制。1的位置将为您提供“备选方案”的索引。e、 g.23=10111(二进制)。这意味着,从右到左,第1、第2、第3和第5个备选方案用于构建23。请注意将数字转换为二进制。1的位置将为您提供“备选方案”的索引。e、 g.23=10111(二进制)。这意味着,从右到左,第1、第2、第3和第5个备选方案用于构建23。请注意将数字转换为二进制。1的位置将为您提供“备选方案”的索引。e、 g.23=10111(二进制)。这意味着,从右到左,第1、第2、第3和第5个备选方案用于建造23。@BloodShura没问题,这是我的荣幸:)@BloodShura没问题,这是我的荣幸:)@BloodShura没问题,这是我的荣幸:)