原 對乙個函式的理解

2021-04-02 08:24:20 字數 1508 閱讀 5958

作用:統計乙個數中值為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有了一絲不信任的感覺。剛才找到乙個介紹,裡面說了...