十进制到二进制格式转换

时间:2014-01-17 08:10:27

标签: java arrays binary decimal

我必须编写一个Java程序作为分配的一部分,将十进制输入转换为以下格式: 无符号二进制,无符号十六进制,带符号幅度,1的补码和2的补码 < / strong>即可。问题是我不允许使用任何内置的java组件,否则这些组件将不会如此困难。我已经在这个问题上工作了好几个小时,我想做的最后一件事就是来这里寻求帮助,但我真的很难过。我没想到,我也没有找任何人为我完成作业。我所要求的只是在正确的方向上轻推。

程序的输出/输入必须如下:

Enter num bytes: 2

Enter number (or Q to quit): 4095

Input number=4095
    Unsigned binary = 0000 1111 1111 1111   (0x0fff)
    Signed-magnitude = 0000 1111 1111 1111
    One's complement = 0000 1111 1111 1111
    Two's complement = 0000 1111 1111 1111
    Excess 32768 = 1000 1111 1111 1111

Enter number (or Q to quit): -4095

Input number=-4095
    Unsigned binary = undefined
    Signed-magnitude = 1000 1111 1111 1111
    One's complement = 1111 0000 0000 0000
    Two's complement = 1111 0000 0000 0001
    Excess 32768 = 0111 0000 0000 0001

我非常了解如何计算这些值,并且我已经相应地制定了许多算法。我遇到的问题是我不知道如何正确组织我的课程以使该程序高效。大多数情况下,我对我给出的指示感到困惑。

他们的内容如下:

  

不要在Java中使用字节数据类型。我们想要显示我们用于进行二进制编码的算法。我创建了一个简单的BitString类。它的一个字段是char的数组。它有以下方法:BitString(numBytes),clear(),invert(),encodeUnsigned(num),setBit(pos,char)。

我不明白为什么我们要使用char数组来存储这些位值。我已经设置了这个,以便BitString中的构造函数接受字节数的参数,将其乘以8并使用此数字创建一个新的char数组。然后,为了获得十进制的无符号二进制值,我实现了以下内容:

String unsigned = "";
while(decimal > 0)
{
  unsigned = decimal%2 + unsigned;
  decimal = decimal >> 1;
}

我不知道我应该从这里做什么,以便能够将这些值存储在该数组中,以便我可以使用它来计算其他格式。我似乎无法将整数存储为字符,我对如何使用该数据结构执行其他操作感到困惑。更复杂的是,你会发现我需要填充数据,使其包含正确的位数。

如果这是你的问题,你会如何解决它?你会如何解决它?我正在寻找最基本的解决方案,这对于像我这样的新手来说很容易理解。 非常感谢你。

1 个答案:

答案 0 :(得分:0)

说明可能意味着,而不是

String unsigned = "";

这些数据更容易被操作成其他格式(这是伪代码,我真的不知道java):

char unsigned[numBytes * 8];

数组每个位置存储一位。

要进行按位操作,只需遍历数组并对每个“位”进行操作。