[問題] 計算數字的二進制長度

看板C_and_CPP (C/C++)作者 (與程式最後的決戰)時間16年前 (2009/09/17 12:54), 編輯推噓7(708)
留言15則, 8人參與, 最新討論串1/4 (看更多)
請問有直接計算二進制長度的語法嗎? 例如:12(10) = 1100(2) 那長度就是 4 我是有想說寫a|(2^31-1),然後再&1計算1有幾個就是它的長度 不過,是否有直接的語法可以用呢? -- 周瑜你好: 我們是荊州水軍統領的蔡瑁和張允,曹操帶領北方八十三萬大軍南下 我們假裝投降,過幾天,我們就會把他的人頭砍下來 送給你,敬請笑納 最後敬祝 閤府平安 健康快樂 金榜提名 早日康復 MerryChristmas & Happy New Year 本期大樂透名牌 1 2 3 4 5 6 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.137.179

09/17 13:00, , 1F
LOG以2為底 ...
09/17 13:00, 1F

09/17 13:01, , 2F
取整數 然後+1
09/17 13:01, 2F

09/17 13:03, , 3F
取整數請用int
09/17 13:03, 3F

09/17 17:40, , 4F
感謝^^
09/17 17:40, 4F

09/17 18:02, , 5F
可以試試bitset XD
09/17 18:02, 5F

09/17 19:57, , 6F
一般都O(lgn)來算 不過 x86 系列有 BSF, BSR 指令~
09/17 19:57, 6F

09/17 19:58, , 7F
不過我覺得 a|(2^31-1) 怪怪的? 首先^是 xor 不是指數,再
09/17 19:58, 7F

09/17 19:59, , 8F
來為什麼這樣可以計算有幾個 1? 好像跟長度沒什麼關聯 ...
09/17 19:59, 8F

09/17 19:59, , 9F
其實不用內建函式的話直接 /2, /2, /2... 算就好了
09/17 19:59, 9F

09/17 20:19, , 10F
>> 1 :)
09/17 20:19, 10F

09/17 21:46, , 11F
根本直接印出bits就好了吧XD
09/17 21:46, 11F

09/17 21:56, , 12F
那是因為你知道 ^ 是xor,可是一般總把他當成power用
09/17 21:56, 12F

09/18 00:46, , 13F
如果用有support posix 的library 在 strings.h 裡有
09/18 00:46, 13F

09/18 00:46, , 14F
ffs 可以用
09/18 00:46, 14F

09/18 05:09, , 15F
寫Maple習慣了,2的31次方就是2^31,它會自動轉換=v="
09/18 05:09, 15F
文章代碼(AID): #1AiS429h (C_and_CPP)
文章代碼(AID): #1AiS429h (C_and_CPP)