如果我想二進制轉換成十進制,是有辦法,我可以這樣做:值分配給變量
假設:
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.
我想這樣做,所以我可以通過二進制到另一個方法轉換爲十進制。
如果我想二進制轉換成十進制,是有辦法,我可以這樣做:值分配給變量
假設:
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.
我想這樣做,所以我可以通過二進制到另一個方法轉換爲十進制。
可以使用位操作(假定newState[N]
爲0或1):
binary = (newState[i-2] << 2) |
(newState[i-1] << 1) |
(newState[i]);
當我做了: printf(「Binary:%d」,binary); 它仍然顯示爲0? – temp 2010-03-02 23:07:36
@temp - 仔細檢查'newState [i-2]','newState [i-1]'和'newState [i]'的值 - 我懷疑所有的都是0. – 2010-03-02 23:15:47
你的問題有點不清楚。你究竟擁有什麼?你是否擁有一個擁有你的價值的單個元素的數組?那麼你需要從這些位組成真正的價值,如
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中那樣串聯值或字符串。
您正在使用*逗號運算符*並需要使用二進制算術運算符,如'|'用於組合比特。你也可以使用'<<' and '>'移位運算符,或者只依賴簡單的代數:'binary = newState [i-2] * 4 + newState [i-1] * 2 + newState [i] * 1'。另請查閱* Little Endian *和* Big Endian *。 – 2010-03-03 00:36:21