2010-03-02 166 views
0

如果我想二進制轉換成十進制,是有辦法,我可以這樣做:值分配給變量

假設:

newState[i-2] = 0, 
newState[i-1] = 0, 
newState[i] = 1 

binary = newState[i-2], newState[i-1], newState[i]; // but if I did this, bin = 0, not 001. 

我想這樣做,所以我可以通過二進制到另一個方法轉換爲十進制。

+0

您正在使用*逗號運算符*並需要使用二進制算術運算符,如'|'用於組合比特。你也可以使用'<<' and '>'移位運算符,或者只依賴簡單的代數:'binary = newState [i-2] * 4 + newState [i-1] * 2 + newState [i] * 1'。另請查閱* Little Endian *和* Big Endian *。 – 2010-03-03 00:36:21

回答

1

可以使用位操作(假定newState[N]爲0或1):

binary = (newState[i-2] << 2) | 
     (newState[i-1] << 1) | 
     (newState[i]); 
+0

當我做了: printf(「Binary:%d」,binary); 它仍然顯示爲0? – temp 2010-03-02 23:07:36

+0

@temp - 仔細檢查'newState [i-2]','newState [i-1]'和'newState [i]'的值 - 我懷疑所有的都是0. – 2010-03-02 23:15:47

0
,如果你想保持二進制值的數組

您可以使用int爲。所以你會自動獲得號碼。獲取價值也很容易打賭你打電話(x & (1 << i))

+0

(x&(1 <<我)) 我該如何使用,如果我要傳遞int二進制?內存中始終以二進制形式存儲整個內存中的 – temp 2010-03-02 23:09:04

+0

。當你顯示它們時它們變成「十進制」 – Andrey 2010-03-02 23:17:36

1

你的問題有點不清楚。你究竟擁有什麼?你是否擁有一個擁有你的價值的單個元素的數組?那麼你需要從這些位組成真正的價值,如

bit[0] = 0; 
bit[1] = 0; 
bit[2] = 1; 
unsigned int value = (bit[0]) | (bit[1]<<1) | (bit[2]<<2); 

或者你有一個值,你想顯示爲二進制?然後,您需要通過提取各個位並顯示適當的字符,從一個值轉換爲二進制表示。不幸的是沒有二進制表示修飾符可用於使用格式字符串的標準函數(因爲%x用於十六進制字符串)。

或者你有二進制格式的值的字符串表示?在這種情況下,您可能需要查看strtoul,它可以將字符串表示形式的值轉換爲一系列數字庫(包括基數2)的值。

通常,C中的數字沒有二進制數,十六進制或其他格式。一個數字是一個數字,它唯一的格式(除了真實機器上的表示)只是它的長度以及它是有符號的還是無符號的(我在這裏拋出浮點數)。 「二進制」,「十六進制」,「十進制」等僅是讀者 - 即人類的相同值的表示。無論表示如何,機器上的值都是完全相同的。

binary = newState[i-2], newState[i-1], newState[i]; // but if I did this, bin = 0, not 001. 

這是使用comma operator的表達式。您不能像C中那樣串聯值或字符串。