`check / = 2;`的解释

时间:2012-04-12 07:38:27

标签: java

我需要对此代码进行一些解释。 这是其他人给出的示例代码。

    for ( int i = 1; i <= 8; i++ )
    {
        if(check % 2 == 0)
            sum += i;
        else
            sum -= i;
        check /= 2;            <--- Need explanation for this line.
    }

但在Pseudo code中,没有check /= 2;程序。

以下是完整的Pseudo code

int binary = 0;
int sum;

while(binary<256)
sum = 0;
for(go through all 8 digits)
    if the i-th digit is 0
        sum += i
    if the i-th digit is 1
        sum -= i
end for

if sum == 0
    output

binary++
end while

那么,那行代码的目的是什么?

由于sumbinarycheck初始化为0

我使用上面给出的伪代码编写了这段代码。 但似乎我的代码将复制输出和另一个问题,即格式。

我希望输出格式如下:

Enter a number : 3

-1 -2 +3 = 0
1 +2 -3 = 0 

但我目前的输出是:

Enter a number : 3

-1 -2 3 = 0
1 2 -3 = 0

这是我的代码:

CODE IS REMOVED!

解决!

我太专注于输出部分的for - 循环,因此错过了二进制的while - 循环,因为伪代码用于256种可能的解决方案,因此,将会有前部的输出相同,例如:

1 - 2 - 3 + 4 = 0                             

1 - 2 - 3 + 4 + 5 - 6 - 7 + 8 = 0

因此,伪代码可以给出相同的输出。因此,由于解决方案位于2 ^ n n = 1, 2, 3, ...形式,因此请更改

 while( binary < 256 )   --->     while ( binary < Math.pow(2, input))

应该解决它。

解决了答案的格式和副本。

4 个答案:

答案 0 :(得分:5)

这是go through all digits的方法。最正确的数字由check % 2检索,检查后,您将check一位数(位)向右移check /= 2(等于check = check / 2;

答案 1 :(得分:1)

使用此算法,您将所有位设置为1并设置为0

check /= 2;

就像

check = check / 2;

您可以使用它将所有位右移一个。 例如:

(binary) 101 / (decimal) 2 = (binary) 10

101向右移一位数。

答案 2 :(得分:1)

让我们来看看这一行:

check /= 2;

在Java中,它等同于以下简单语句:

check = check / 2;

现在让我们找出它背后的目的:

  1. check % 2
  2. 检查最右边的数字
  3. 然后它被check /= 2
  4. 右移一位数

答案 3 :(得分:0)

check / = 2相当于check = check / 2;

它只是一种将多个赋值组合成一个赋值的方法,如sum + = 2等于sum = sum + 2;