C語言中的位運算 學習來自劍指offer

2021-06-22 15:31:26 字數 870 閱讀 6750

1.二進位制中1的個數

請實現乙個函式,輸入乙個整數,輸出該數的二進位制表示中1的個數,

int numberof1(int n)

int count = 0;

while(n)

return count;

}討論上面**的正確性,移位操作,當對乙個正數右移的時候,補充的是0,但是當對乙個負數進行移位的時候,從左側開始補充的是符號位也就是1

當n為正數的時候,**可以正確得出結果,但是,當輸入的n是個負數則n最後可能變成0xfffffffff,使while陷入死迴圈。

2.int numberof1(int n)

int cont = 0;

unsigned int flag = 1;

while(flag)

if(n & flag)

count++;

flag = flag << 1; 

return count;

在這個演算法中,迴圈的次數等於n中二進位制的位數,二進位制位數有幾位那麼就迴圈幾次,flag逐漸向左移位,測試整數二進位制情況下的所有位是否為一。

3.由第二種演算法進行分析,是否可以直接只迴圈1的個數次,即當二進位制位為0的時候不去進行迴圈,只有當當前的二進位制位為1 的時候才進行迴圈,

int numberof1(int n)

int count =  0;

while(n)

++count;

n = (n-1) & n;

}第三種演算法主要運用了二進位制轉換中的乙個知識點,

把乙個數減去1與自己本身相與那麼二進位制形式下最右側的1變成0

此時進行第三種演算法中的while迴圈的時候,每次都把二進位制中的乙個1變成0按照這種方式進行遞迴,最終二進位制中1都變成了0.

C語言位運算 學習筆記

位運算是指按二進位制位進行的運算,實際上就是直接對整數在記憶體中的二進位制位進行操作。二進位制通俗來說就是只有0和1兩個可用的數字來表示一切狀態,方便理解可以說成是一盞燈的開和關兩種狀態,狀態有何用?對計算機來說使用者輸入資料,然後顯示這個簡單的過程就需要人機互動,即使用者和計算機的溝通,也可以說是...

C語言中的位運算

0 推薦 在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用 位運算 來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。c語言提供了位運算的功能,這使得c語言也能像組合語言一樣用來編寫系統程式。位運算子c語言提供了六種...

C語言中的位運算

c語言中的位運算有六個 按位與 按位或 按位異或 取反 左移 右移 除 以外其餘均為二元運算子,即要求運算子兩側均有乙個運算量 位運算量只能為整型或字元型,不能為實型資料。1.按位與 0 0 0 0 1 0 1 0 0 1 1 1 3 5 00000011 00000101 00000001 1 的...