x x 1 式子的含義

2021-07-10 19:56:29 字數 1282 閱讀 6773

今天看到一道面試題:

題目是這樣的:

#include 

using

namespace

std;

int func(int x)

return count;

}int main()

a.8 b.9 c.10 d.11

經過我用最原始的計算方法計算

9999 二進位制10 0111 0000 1111

10 0111 0000 1111
& 10 0111 0000 1110

= 10 0111 0000 1110

& 10 0111 0000 1101

= 10 0111 0000 1100

& 10 0111 0000 1001

= 10 0111 0000 1000

& 10 0111 0000 0001

= 10 0111 0000 0000

& 10 0110 0000 0001

= 10 0110 0000 0000

& 10 0100 0000 0001

= 10 0100 0000 0000

& 10 0000 0000 0001

= 10 0000 0000 0000

& 00 0000 0000 0001

= 00 0000 0000 0000

結果為a。

分析:每執行一次x = x&(x-1),會將x用二進位制表示時最右邊的乙個1變為0,因為x-1將會將該位(x用二進位制表示時最右邊的那個1)變為0。(假設該位為第k位,減1後,該位後面全部變成1,但是由於該位是最右邊的1了,所以x的第k位後面全是0,而x-1的第k位是0,從1到k-1位全是1,按位與的結果自然就是第k位和1~k-1位都變成0。)

所以func()這個函式的作用是統計9999這個數字轉化為二進位制後,1的個數是多少。

除了這個功能以外

x & (x - 1)

用處:

①將最低的為1的位變成0.

②當x為奇數的時候,x = x & (x - 1);一樣的效果;

x 為2的n次冪時,結果為0,這可以用來快速判斷乙個數是否為2的n次方。

whiy?

因為如果乙個數為2的n次冪,那麼其最高位為1。

#include 

int func(int

x)int main()

x x 1 表示式的意義

求下面函式的返回值 微軟 統計1的個數 int func int x return countx 假定x 9999 10011100001111 答案 8 思路 將x轉化為2進製,看含有的1的個數。注 每執行一次x x x 1 會將x用二進位制表示時最右邊的乙個1變為0,因為x 1將會將該位 x用二...

x x 1 表示式的意義

求下面函式的返回值 微軟 統計1的個數 int func int x return countx 假定x 9999 10011100001111 答案 8 思路 將x轉化為2進製,看含有的1的個數。注 每執行一次x x x 1 會將x用二進位制表示時最右邊的乙個1變為0,因為x 1將會將該位 x用二...

x x 1 表示式的意義

2007 12 04 20 13 求下面函式的返回值 微軟 統計1的個數 int func int x return countx 假定x 9999 10011100001111 答案 8 思路 將x轉化為2進製,看含有的1的個數。注 每執行一次x x x 1 會將x用二進位制表示時最右邊的乙個1變...