第一段程式碼
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++ 中的位運算
第一段程式碼
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++ 中的位運算