作用:統計乙個數中值為1的位的個數。
說明:此函式是將乙個數的二進位中,值為1的位的個數加以統計。比如十進位制數22,轉為二進位制是10110 ,它值為1的位的個數是3。
費話:此函式來自<函式**:
int count_one_bits(unsigned value)
呼叫函式:
#include
#include
int main(void)
int count_one_bits(unsigned value)
分析思路:
int count_one_bits(unsigned value) /*此處定義value為無號整型,所以右移時,為邏輯右移*/
:::判斷奇偶數:::
十進位制數中,乙個數能被2整除時,證明此數為偶數,不能被2整除時,此數為奇數。
二進位制數中,乙個數的最低位(最後一位)值為1時,此數為奇數,最低位為0時,此數為偶數。
:::移位操作符:::
移位操作符是將乙個值的位全部向左或向右移動
包括"<<(左移)" 和 ">>(右移)"
左移運算子(<<)
用來將乙個數的各二進位制位全部左移若干位。
在左移位中,值最左邊的幾位被丟棄,右邊空出來的位用0補齊,例如:
a=a<<2
將a的二進位制數左移2位,右邊空出來的位用0補齊。若a=15,我們用八位二進位制數表示,二進位制數為00001111,左移2位得到00111100,即為十進位制的60
左移前:00001111
左移後:00111100
左移1位,相當於該數乘2,a左移了2位,就相當於乘以4等於60(15x4=60)
右移運算子(>>)
用來將乙個數的各二進位制位全部右移若干位。
右移1位,相當於該數除2
1.邏輯右移
即為無符號值右移,左邊高位移入0,移到右端的低位被捨棄。例如:
a=a>>2
將a的二進位制數右移2位,若a=15,用八位二進位制數表示,
右移前:00001111
右移後:00000011
2.算術右移
ansi標準中定義
int(整型)的取值範圍為-32767~32767,32767的二進位制為0111111111111111,十六位寬,最高位用來表示符號,即符號位,0代表正整數,1代表負整數。
unsigned int(無符號整型)的取值範圍為65535,在儲存單元中,最高位(符號位)也用來儲存數值,所以
65535的二進位表示為1111111111111111
ms系統中,把int定義為16位,long定義為32位
清楚了上面的概念,算術右移就不難理解了。例如:
a: 1111111111000000(-32704)
a>>1: 0111111111100000(邏輯右移)
a>>1: 1111111111100000(算術右移)
即對有符號數右移時,如果符號位原來為1,則左面移入高位的也是1
根據編譯器不同,右移的結果也會有所不同(完)。
2020 07 15 對「穩定」的乙個理解
22 00 人生就像滾雪球,重要的是發現夠濕的雪和一面夠長的山坡。如果你找到正確的雪地,雪球自然會滾起來,我就是如此。所謂滾雪球,我並不僅僅指賺錢,在認識世界 結交朋友的時候同樣如此。沃倫 巴菲特 上週的乙個晚上,何太似乎很正經地問了我乙個問題,問我要不要逐步考慮進乙個事業單位。那天晚上我實在是困,...
乙個小白對Arguments的理解
2 arguments與形參保持不同的儲存空間,只有當形參被賦值之後兩者才會相等 3 傳說在嚴格模式下函式內自調,arguments.callee失效了,arguments.callee function name function tomg a,b,c console.log a console....
對SSL乙個疑問的新理解
看了很多關於https ssl的介紹,關於數字證書部分,我一直有個疑問 如果數字證書檔案被別人拿到,那是不是就可以進行通訊了呢?如果這樣,那整個安全機制就完全失去作用了。從開發的角度,我拿到別人的數字證書,我就可以接入到他的通訊環節中去。這讓我對ssl有了一絲不信任的感覺。剛才找到乙個介紹,裡面說了...