Re: [問題] 計算數字的二進制長度
看板C_and_CPP (C/C++)作者adrianshum (Alien)時間16年前 (2009/09/17 21:04)推噓4(4推 0噓 10→)留言14則, 4人參與討論串3/4 (看更多)
※ 引述《bleed1979 (十三)》之銘言:
: ※ 引述《chrisjon (與程式最後的決戰)》之銘言:
: : 請問有直接計算二進制長度的語法嗎?
: : 例如:12(10) = 1100(2)
: : 那長度就是 4
: : 我是有想說寫a|(2^31-1),然後再&1計算1有幾個就是它的長度
: : 不過,是否有直接的語法可以用呢?
: 沒有特別去想有沒有特殊解法, 直觀的做法就是最左邊的1出現的位置
: #include <stdio.h>
: int Blen(int a)
: {
: int i,b;
: for (i=31,b=0x80000000;i>=0 && !(a&b);i--,b>>=1)
: ;
: return(i+1);
: }
: int main(void)
: {
: printf("%d\n",Blen(12));
: return(0);
: }
: Bleed
你這個做法的話, 可以寫得簡單一點:
(沒有測試過, 應該可以吧 XDD )
int binaryLength(int x) {
int i;
for (i = 31; i > 0 && (x & (1 << i)) ; i--){
}
return i;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
推
09/17 21:09, , 1F
09/17 21:09, 1F
→
09/17 21:12, , 2F
09/17 21:12, 2F
→
09/17 21:15, , 3F
09/17 21:15, 3F
推
09/17 21:40, , 4F
09/17 21:40, 4F
→
09/17 21:40, , 5F
09/17 21:40, 5F
→
09/17 21:41, , 6F
09/17 21:41, 6F
推
09/17 21:46, , 7F
09/17 21:46, 7F
→
09/17 22:13, , 8F
09/17 22:13, 8F
→
09/17 22:14, , 9F
09/17 22:14, 9F
推
09/17 22:21, , 10F
09/17 22:21, 10F
→
09/17 22:22, , 11F
09/17 22:22, 11F
→
09/17 22:22, , 12F
09/17 22:22, 12F
→
09/17 22:23, , 13F
09/17 22:23, 13F
→
09/17 22:48, , 14F
09/17 22:48, 14F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章