2014-01-17 114 views
0

我必须写一个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类。它的一个字段是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; 
} 

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

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

回答

0

的说明大概的意思是,不是

String unsigned = ""; 

的数据会更容易被操纵成其他格式的东西,如(这是伪代码,我真的不知道JAVA):

char unsigned[numBytes * 8]; 

该阵列每个位置存储一位。

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