gpt4 book ai didi

Java按位运算返回 "wrong"值

转载 作者:行者123 更新时间:2023-12-02 05:03:49 29 4
gpt4 key购买 nike

---编辑:我不允许使用任何包或预置方法。不用担心,我不想让你做我的“作业”,我只需要一点提示!---我发现these interesting Algorithms 。我想使用按位添加方法。我的问题是,左移运算符返回一个非二进制值......我理解该算法,但我还是一个初学者。这就是“程序”。我实现了额外的输出来查找问题。我想这一定是左移运算符。这是代码:

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)

如果有任何帮助,我会很高兴! :)祝你今天过得愉快,皮质

最佳答案

程序中的值从未被解释为二进制。您实际上是将十进制值 10011101 相加,并将它们正确地求和为 2102。此外,十进制 10011101 的二进制表示为

1001: 00000011 11101001
1101: 00000100 01001101

编辑时,您将得到十进制73:

  73: 00000000 01001001

如果您想将这些数字解释为二进制,请在 Integer.parseInt 中使用基数 2 ,例如:

first = Integer.parseInt(userInput.readLine(), 2);

要以二进制格式输出数字,请使用 Integer.toBinaryString ,例如:

System.out.println("Ergebnis: " + Integer.toBinaryString(xor));

关于Java按位运算返回 "wrong"值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27994793/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com