最近在學習資料結構感覺利用二進位制位來標記乙個數是否存在是特別節省空間的,比如點陣圖和布隆過濾器是效率比較高的。所以感覺有必要複習一下二進位制位的一些常用的操作。
通過幾個例子來複習一下:
(一)寫乙個函式返回引數二進位制中 1 的個數(與運算)
int count_one_bits(size_t value)
printf("\n");
return count;
}
int count_one_bits(size_t value)
printf("\n");
return count;
}
1&1=1;1&0=0; num<<1等價於num*2;num>>1等價於num/2;
這一題主要運用或(&)的性質和<<,可以計算出乙個數二進位制位中1的個數。
(二)交換兩個一樣大的陣列的內容(異或運算)
int i,a[10]=;
int b[10]=;
for(i=0;i異或的是有那麼乙個公式的,a=a^b;b=a^b;a=a^b;即可交換a和b的值。
(三)求兩個數的最大公約數(取模)
#includeint main()
printf("最大公約數是%d\n",n);
}
(四)判斷乙個數是否是素數(常用素數,要理解素數怎麼來的)
int is_prime(int n)
判斷乙個數是否是素數,只要這個數除以 2到這個數的開方任意乙個數 都不能整除就是乙個素數,否則不是素數。
當然今天這篇部落格很基礎,但是是非常有用的,熟練掌握以後很有用。
本文出自 「稻草陽光」 部落格,請務必保留此出處
二進位制的一些操作
1 二進位制與十進位制互轉 十進位制轉二進位制 例子 13 1101 13 2 6餘1 6 2 3餘0 3 2 1餘1 1 2 0餘1 那麼13用二進位制表示為 1101 倒序排列餘數 不足的用0補齊 00001101 二進位制轉十進位制 例子 1101 13 可以在c 裡面宣告為 int num ...
位操作複習題之反轉二進位制位
題目 顛倒給定的 32 位無符號整數的二進位制位。示例 1 輸入 00000010100101000001111010011100輸出 00111001011110000010100101000000解釋 輸入的二進位制串00000010100101000001111010011100表示無符號整數...
關於二進位制的一些總結
5 00000000 00000000 00000000 00000101 原碼 乙個整數,按照絕對值大小轉換成的二進位制數 反碼 將二進位制數按位取反,所得的新二進位制數稱為原二進位制數的反碼 補碼 反碼加1稱為補碼 5 原碼 00000000 00000000 00000000 00000101...