2017-06-02 55 views
1
void int_to_bin_digit(int in, int count, int* out) 
{ 
    int mask = 1U << (count-1);  // LINE 1 
    int i; 
    for (i = 0; i < count; i++) 
    { 
     out[i] = (in & mask) ? 1 : 0; // LINE 3 (I don't understand it) 
     in <<= 1;      // LINE 2 
    } 
} 

我需要一個函數將int轉換爲binary.I不知道如何自己創建一個,因爲我從來沒有使用位運算符。我在這裏發現了這個工作。將整數轉換爲二進制。我不明白這個功能是如何工作的

假設我們調用函數像這樣int_to_bin_digit(67,8,出來)

我明白線1給屏蔽值128(1000 0000),以及線2使得67(0100 0011)是這樣的(不知道這個)

i=0 (0100 0011) 
----------- 
i=1 (1000 0110) 
i=2 (0000 1100) 
i=3 (0001 1000) 
i=4 (0011 0000) 
i=5 (0110 0000) 
i=6 (1100 0000) 
i=7 (1000 0000) (loop stops here) 

(0000 0000) (so we never get to this one I guess) 

是否線3只比較第一1和返回1,如果它的== 1和返回0,如果它是!= 1?它是如何工作的?

編輯:https://davidzych.com/converting-an-int-to-a-binary-string-in-c/看完這個後。我看到我們只比較裏面的第一個和第一個裏面的掩碼 我不明白爲什麼它不會每次都返回1,只比較前幾位?

+3

使用調試器觀察out數組並逐步執行代碼。 – AmeyaVS

回答

1

是的,你的假設幾乎都是正確的。

LINE 1是最低位count的掩碼。 LINE 3測試這個位是否在您的in號碼中設置。術語&代表「位和」,其中「和」對位進行操作,當兩個操作數等於1時僅等於1,而「位」則表示將其應用於操作數的相應位對。 LINE 2然後繼續將in的所有位向左移位,使之前的(n-1)位成爲第n位。

但總而言之,請考慮閱讀有關按位運算的教程,這將使您作爲C程序員的生活變得更加輕鬆。

+0

哦!我感謝。我把&&與&混淆。以前從未使用過按位運算符!非常感謝! – Nihaaw

相關問題