Java按位操作返回;“错误”;价值

Java按位操作返回;“错误”;价值,java,binary,operations,Java,Binary,Operations,---编辑:我不允许使用任何包或prewirtten方法。别担心,我不想让你做我的“家庭作业”,我只需要一点提示--- 我找到了。我想使用bitwiseAdd方法。我的问题是,左移位运算符返回的值不是二进制的。。。 我理解这个算法,但我是个初学者。这就是“计划”。我实现了额外的输出以发现问题。我想一定是左档操作员。代码如下: import java.io.BufferedReader; import java.io.InputStreamReader; class Addition1 { pu

---编辑:我不允许使用任何包或prewirtten方法。别担心,我不想让你做我的“家庭作业”,我只需要一点提示--- 我找到了。我想使用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);
}
}
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
类别增补1
{
公共静态int优先;
公共静态int秒;
公共静态void main(字符串args[])引发异常
{
BufferedReader userInput=新的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());
按位添加(第一,第二);
}
公共静态void按位添加(int n1,int n2)
{
int x=n1,y=n2;
int-xor,和,temp;
和=x&y;
xor=x^y;
System.out.println(“x:+x”);
System.out.println(“y:+y”);
System.out.println(“和:”+和);
System.out.println(“xor:+xor”);
System.out.println(“Schleife:”);
while(and!=0)
{

而程序中的值从来没有被解释为二进制。实际上,您正在添加十进制值
1001
1101
,并将它们正确相加为
2102
。此外,十进制
1001
1101
的二进制表示形式是

1001: 00000011 11101001
1101: 00000100 01001101
编辑时,将得到十进制
73

  73: 00000000 01001001
如果要将这些数字解释为二进制,请在中使用基数
2
,例如:

first = Integer.parseInt(userInput.readLine(), 2);
System.out.println("Ergebnis: " + Integer.toBinaryString(xor));
要以二进制格式输出数字,请使用,例如:

first = Integer.parseInt(userInput.readLine(), 2);
System.out.println("Ergebnis: " + Integer.toBinaryString(xor));

您正试图在虚拟机中编写一个虚拟机,而虚拟机本身可能是一个虚拟机。难怪会出现混淆

您需要将数据表示为bool(或int或char等)数组

bool[]操作数1=新bool[8];
bool[]操作数2=新bool[8];
bool[]左移位(bool[]操作数)
{
bool[]结果=新bool[操作数.长度];
对于(int i=8;i>1;i++)
{
结果[i]=操作数[i-1];
}
返回结果;
}
bool[]和(bool[]操作数1,bool[]操作数2)
{
int max,min;
if(操作数1.length>操作数2.length){
最大值=1.5倍长度;
最小值=2.5倍长度;
}
否则{
最大值=2.5倍长度;
最小值=1.5倍长度;
}
bool[]结果=新bool[max];
对于(int i=0;i
我在main方法中使用了
first=1001;second=1101;bitwiseAdd(first,second);
,但程序仍然将它们解释为十进制数(这是合乎逻辑的)

在Java程序中编写文字时,文字的语法告诉Java如何解释它

12345     // decimal
012345    // octal
0x1234    // hexadecimal
0b1001    // binary
这里没有猜测。您使用的语法告诉Java编译器

有关更多信息:

(唯一稍微有点棘手的是,前导的非有效零表示数字是八进制而不是十进制。这是C编程语言遗留下来的遗憾(IMO)。它确实让一些人大吃一惊。)

你知道我怎样才能改变吗

是的……如果你想在源代码中将数字表示为二进制,那么就使用二进制文字



你需要彻底了解的是,二进制/八进制/十进制/十六进制都是关于从用户(或程序员)那里获取数字或向用户(或程序员)呈现数字的。在内部,它们都变成了相同的东西。
int
类型(和其他整数类型)与十进制、二进制等不可知。只有一种类型,
int
上的算术运算符和位运算符只有一种含义。

什么叫“返回非二进制的值”?如果要将数字解析为二进制,可以使用
Integer.parseInt(yourString,2)
@iamnotmaynard好吧,对于1001和1101,结果应该是1001而不是73。当你打印一个int时,Java输出十进制表示。同样,Integer.parseInt假设输入是十进制的。这可能是你的困惑所在。@fge是的,我知道。但这是一个“家庭作业”,别担心。我以前在纸上做过这个算法,然后在谷歌上搜索。我为这个误解感到非常抱歉!我不允许使用Integer.toBinaryString@Cortex-我们自己编写一个等价的方法。以及一个将二进制字符串转换为整数的方法。(但我怀疑你过度阐述了作业要求和/或约束。我真的不认为你的老师说你不能使用任何标准Java库方法或类。如果他是,那么你就不能使用
println
!!!)@StehenC可能是这样的。我在main方法中使用了first=1001;second=1101;bitwiseAdd(first,second);但程序仍然将其解释为十进制数(这是合乎逻辑的)。你知道我如何更改它吗?