[問題] 一行程式碼 判斷N是否為2的冪次

看板C_and_CPP (C/C++)作者 (我不是納豆)時間13年前 (2012/10/09 13:19), 編輯推噓6(608)
留言14則, 5人參與, 最新討論串1/1
看別人面試心得看到的題目 請教版上各位大神 如何用一行程式碼 判斷N是否為2的冪次? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.126.44

10/09 13:50, , 1F
return N&(N-1)?true:false;
10/09 13:50, 1F

10/09 14:15, , 2F
shaopin大true跟false的位置是不是相反了?!
10/09 14:15, 2F

10/09 14:21, , 3F
yeah 弄錯了 年紀大了腦子不靈光
10/09 14:21, 3F

10/09 15:08, , 4F
記得 0 也會返回 true
10/09 15:08, 4F

10/09 15:31, , 5F
s大似乎少了點東西..return !N && ( (N &(N-1) )==N );
10/09 15:31, 5F

10/09 15:33, , 6F
0 也會返回 true, 真是長知識了..謝謝囉
10/09 15:33, 6F

10/09 15:39, , 7F
Edison大 敢請提供一些你的解法的test case?
10/09 15:39, 7F

10/09 15:39, , 8F
不過我測試的結果 0 好像不會反回true耶
10/09 15:39, 8F

10/09 15:46, , 9F
@s大,您的例沒判斷到==N. N=7(111) 時, N&(N-1)=6(110),
10/09 15:46, 9F

10/09 15:48, , 10F
您的寫法傳回true.所謂的0會反回true指的是 N &(N-1)==N.
10/09 15:48, 10F

10/09 16:02, , 11F
sorry.我看懂了,忽略樓上 @@
10/09 16:02, 11F

10/09 22:54, , 12F
return N&(N-1)?false:true; 2的次方和0才會是false
10/09 22:54, 12F

10/09 22:55, , 13F
不好意思我看錯了
10/09 22:55, 13F

10/09 23:58, , 14F
2^n=(10...0)b 有n個零 2^n-1=(01...1)b 有n個1
10/09 23:58, 14F
文章代碼(AID): #1GSxFZd2 (C_and_CPP)
文章代碼(AID): #1GSxFZd2 (C_and_CPP)