2014-01-17 115 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]; 

該陣列每個位置存儲一位。

要執行按位操作,您只需遍歷數組並對每個「位」進行操作。