回覆列表
  • 1 # 使用者5713351204666

    第一段程式碼

    1 byte 有 8 位。sizeof(int)算出有多少個byte,這時候,size 就得到總共有多少二進位制位。

    for 迴圈中,有兩個變數。i,表示字元二進位制位的索引,i 逆序遍歷。n >>= 1,右移。比如 n 二進位制表示為,00001001,(這裡以8位表示,其它一樣的)。 連續右移,為

    這個時候,01 & n, 就為。

    這樣,就可以逆序得到二進位制數字的字元值。

    因為 i, 也是逆序,賦值給 ps的。所以最後的結果,就是字元陣列中,正確存放了,二進位制的字元值。

    第二段程式碼

    這函式,並非翻轉num, 而是翻轉num的後幾位。bits表示需要翻轉後面的位數。

    這裡的迴圈,是要構造後面全是1的掩碼mask。還是用8位表示,假如,bits為4,就是要構造出 00001111。bits為5,就是要構造出00011111。看那個迴圈

    bits-->0, 其實是 bits-- > 0, 表示要迴圈 bits 次。以3次為例。bitval左移,就是

    這樣mask 開始為 0000 0000,

    迴圈3次後,掩碼mask就構造好了,等於0000 0111。之後呼叫

    0^0=0

    0^1=1

    0 異或 數字,數字不變

    1^0=1

    1^1=0

    1 異或 數字,數字取反。

    所以構造好mask之後,假如mask為,00000111,就表示前面二進位制數字不變,後面數字取反。

    附:

    更多位運算的內容,可以看看我以前的部落格文章。 C/C++ 中的位運算

  • 中秋節和大豐收的關聯?
  • 對於開始並不喜歡的行業,你做過哪些努力讓自己喜歡它?