【发布时间】:2015-01-17 00:18:27
【问题描述】:
---编辑:我不允许使用任何包或预写方法。不用担心,我不想让你做我的“功课”,我只需要一点提示!--- 我找到了these interesting Algorithms。我想使用 bitwiseAdd 方法。我的问题是,左移运算符返回一个不是二进制的值...... 我理解算法,但我是一个初学者。所以这里是“程序”。我实施了额外的输出来发现问题。我认为它必须是左移运算符。代码如下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
class Addition1
{
public static int first;
public static int second;
public static void main(String args[]) throws Exception
{
BufferedReader userInput = new BufferedReader(newInputStreamReader(System.in));
System.out.println("Geben sie den ersten Summanden ein!");
first = Integer.parseInt(userInput.readLine());
System.out.println("Geben sie den zweiten Summanden ein!");
second = Integer.parseInt(userInput.readLine());
bitwiseAdd(first, second);
}
public static void bitwiseAdd(int n1, int n2)
{
int x = n1, y = n2;
int xor, and, temp;
and = x & y;
xor = x ^ y;
System.out.println("x: " + x);
System.out.println("y: " + y);
System.out.println("and: " + and);
System.out.println("xor: " + xor);
System.out.println("Schleife:");
while (and != 0)
{
and <<= 1;
System.out.println("and <<= 1: " + and);
temp = xor ^ and;
System.out.println("temp = xor ^ and: " + temp);
and &= xor;
System.out.println("and &= xor: " + and);
xor = temp;
System.out.println("xor = temp: " + xor);
}
System.out.println("Ergebnis: " + xor);
}
}
这里是 n1= 1001 和 n2=1101 的程序的输出(+注解):
Geben sie den ersten Summanden ein! (means: type in first value)
1001
Geben sie den zweiten Summanden ein! (means: type in second value)
1101
x: 1001
y: 1101
and: 73 (java might interpret x and y as non binary)
xor: 1956
Schleife: (means: loop)
and <<= 1: 146
temp = xor ^ and: 1846
and &= xor: 128
xor = temp: 1846
and <<= 1: 256
temp = xor ^ and: 1590
and &= xor: 256
xor = temp: 1590
and <<= 1: 512
temp = xor ^ and: 1078
and &= xor: 512
xor = temp: 1078
and <<= 1: 1024
temp = xor ^ and: 54
and &= xor: 1024
xor = temp: 54
and <<= 1: 2048
temp = xor ^ and: 2102
and &= xor: 0
xor = temp: 2102
Ergebnis: 2102 (means: result)
我会很高兴得到任何帮助! :) 祝你今天过得愉快, 皮质
【问题讨论】:
-
“返回非二进制值”是什么意思?
-
如果你想解析你的数字为二进制,你可以使用
Integer.parseInt(yourString, 2) -
@iamnotmaynard 好吧,对于 1001 和 1101,结果应该是 1001 而不是 73..
-
当你打印一个 int 时,Java 输出十进制表示。同样, Integer.parseInt 假设输入是十进制的。这可能是你的困惑点。
-
@fge 是的,我知道。但这是“功课”,不用担心。我之前在纸上做过算法,然后用谷歌搜索它。
标签: java binary operations