【问题标题】:Decimal to Binary Format Conversion十进制到二进制格式转换
【发布时间】:2014-02-06 11:40:30
【问题描述】:

我必须编写一个 Java 程序作为作业的一部分,将十进制输入转换为以下格式:无符号二进制、无符号十六进制、有符号幅度、1 的补码和 2 的补码。问题是我不允许使用任何内置的 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 类。它的一个字段是一个字符数组。它有如下方法: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;
}

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

如果这是您的问题,您将如何解决以及如何布置?我正在寻找像我这样的新手很容易理解的最基本的解决方案。 非常感谢。

【问题讨论】:

    标签: java arrays binary decimal


    【解决方案1】:

    说明可能意味着,而不是

    String unsigned = "";
    

    数据更容易被处理成其他格式,比如(这是伪代码,我不太懂 java):

    char unsigned[numBytes * 8];
    

    数组每个位置存储一位。

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

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2023-04-11
      • 2016-02-09
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多