2016-11-14 87 views
-4

我想知道是否有可能通過使用二進制數而不是十進制數來索引數組。例如,arr [binary]。你可以用C中的二進制數索引數組嗎?

+5

在計算機上,所有的數字都是二進制的。您需要更具體地瞭解您正在嘗試做什麼。 –

+2

C源代碼中的數字可以寫成八進制,十進制或十六進制,但不是二進制。 (我猜想二進制文字可能已經添加到最近,但如果是這樣的話,我還沒有聽說過)。 – zwol

+1

由於@ zwol並非直接說,但可以編寫一個函數將表示二進制數的字符串轉換爲一個整數。然後,您可以說'arr [binary_to_int(binary)]' – redcurry

回答

2

是的,這絕對有可能。只是0B

int array[] = {1,2,4,6}; 
printf("%d\n", array[0b0001]); // prints 2 

https://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html二進制常量前面加上可以使用0B語法

+1

您能否提供一個指向描述此語法的源的鏈接? –

+0

我不知道有多少編譯器支持這種語法。我無法找到許多引用,並且我剛剛確認C#不支持它。 –

+0

我使用gcc在mac上運行編譯,我也在使用MPLABx和C18編譯器的PIC微處理器上使用了這種語法。 –

2

正如指出的寫入你的二進制數,存儲在計算機上的所有數字都是二進制的。二進制是只有可以存儲在電腦上的東西。

而且,C不支持二進制語法。 (或者也許來的C編譯器嗎?)

你可以從不過二進制字符串轉換爲這樣的:

var value = arr[BinaryToInt("1011")]; 

int BinaryToInt(string s) 
{ 
    int value = 0; 
    int bitValue = 1; 

    for (int i = s.Length - 1; i >= 0; i--) 
    { 
     if (s[i] == '1') 
      value += bitValue; 

     bitValue <<= 1; 
    } 
    return value; 
} 
相關問題