青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰的技術(shù)博客

感興趣領(lǐng)域:高性能服務(wù)器編程,存儲(chǔ),算法,Linux內(nèi)核
隨筆 - 210, 文章 - 0, 評(píng)論 - 1183, 引用 - 0
數(shù)據(jù)加載中……

如何使用位操作得到大于N且為2的次方的最小的數(shù)

RT,比如輸入10返回16, 輸入24返回32,等等.


注意,是使用位操作且沒有循環(huán),也不用表驅(qū)動(dòng)等等.因?yàn)檫@個(gè)操作要經(jīng)常進(jìn)行,要保證高效,所以不能使用循環(huán)(別跟我說用遞歸,熟悉算法和計(jì)算機(jī)本質(zhì)的人都知道遞歸和循環(huán)本質(zhì)是一樣的:);同時(shí),因?yàn)椴恢佬枰?jì)算的數(shù)據(jù)到底有多大,采用表驅(qū)動(dòng)的辦法也不可行.

我在網(wǎng)上發(fā)帖,最終得到了一個(gè)很BT的答案:
int fun(int v)
{
    
float f = (float)(v - 1);  
    
return 1 << ((*(unsigned int*)(&f) >> 23- 126);
}

但是我不知道這個(gè)算法的原理是什么,貌似采用了浮點(diǎn)數(shù)格式的一些特性,知道的同學(xué)請(qǐng)給我一個(gè)詳盡的解釋,在這里先感謝了.

posted on 2008-06-21 15:36 那誰 閱讀(4820) 評(píng)論(10)  編輯 收藏 引用 所屬分類: C\C++算法與數(shù)據(jù)結(jié)構(gòu)

評(píng)論

# re: 如何使用位操作得到大于N且為2的次方的最小的數(shù)  回復(fù)  更多評(píng)論   

很邪惡啊,我還是喜歡簡(jiǎn)單一些的。。。

int fun(int v)
{
int res = 1;
while (res < v)
res <<= 1;

return res;
}
2008-06-21 16:36 | 大日如來

# re: 如何使用位操作得到大于N且為2的次方的最小的數(shù)  回復(fù)  更多評(píng)論   

其實(shí)也不復(fù)雜,只要知道float在內(nèi)存里是怎么存儲(chǔ)的就簡(jiǎn)單的很了
IEEE:
float:
Sign Exponent Mantissa
1bit 8bits 23bits

實(shí)際上float的Mantissa是24位,有一個(gè)隱含的最高位,且該位一直為‘1’

Mantissa表示1~2之間的數(shù)
Expoent=0x7f表示指數(shù)0, Expoent>0x7f為正指數(shù),Expoent<0x7f則為負(fù)指數(shù)
2008-06-21 16:41 | 大日如來

# re: 如何使用位操作得到大于N且為2的次方的最小的數(shù)  回復(fù)  更多評(píng)論   

和BIG-ENDIAN or LITTLE_ENDIAN有關(guān),推薦少用。
2008-06-21 16:51 | 大日如來

# re: 如何使用位操作得到大于N且為2的次方的最小的數(shù)  回復(fù)  更多評(píng)論   

@大日如來
我不覺得和大小端有關(guān)系,浮點(diǎn)寄存器和整數(shù)寄存器在內(nèi)存存取上是一致的。
2008-06-22 17:50 | Louix

# re: 如何使用位操作得到大于N且為2的次方的最小的數(shù)  回復(fù)  更多評(píng)論   

剛才做實(shí)驗(yàn)驗(yàn)證了一下,這個(gè)方法是有Bug的,使用float類型會(huì)造成轉(zhuǎn)換時(shí)的進(jìn)位,使用double就可以了,求數(shù)字二進(jìn)表示長(zhǎng)度的代碼:
double dTarget = ( double )target;
return ( ( *( ( ( unsigned int * ) &dTarget ) + 1 ) ) >> 20 ) - 1023;
這樣的代碼就和大小端相關(guān)了,而且沒有其他版效率高。
2008-06-22 18:45 | Louix

# re: 如何使用位操作得到大于N且為2的次方的最小的數(shù)  回復(fù)  更多評(píng)論   

答案是很BT的,我是想不到
2008-06-22 23:00 | 影視劇

# re: 如何使用位操作得到大于N且為2的次方的最小的數(shù)  回復(fù)  更多評(píng)論   

這個(gè)算法只是玩一玩了,有助于了解IEEE標(biāo)準(zhǔn)浮點(diǎn)數(shù)的構(gòu)造。
實(shí)際應(yīng)用中整形和浮點(diǎn)的相互轉(zhuǎn)換很花時(shí)間,還不如一步步位移來做。
2008-06-25 09:20 | RedNax

# re: 如何使用位操作得到大于N且為2的次方的最小的數(shù)  回復(fù)  更多評(píng)論   

解決問題的關(guān)鍵在于如何找到二進(jìn)制表示時(shí)第一個(gè)‘1’出現(xiàn)的位置。‘1’出現(xiàn)在第n位,則將1左移n位即可。
v - 1是不必要的,意圖可能是想去掉大日如來所說的“隱含的最高位1”,直接轉(zhuǎn)就可以了,要了反而算出的結(jié)果不對(duì),不是float類型轉(zhuǎn)換進(jìn)位的問題。
f右移23位為的是得到存儲(chǔ)在Exponent里的(n-1)+127=n+126,127是常量。再減去126求得n。
利用浮點(diǎn)數(shù)存儲(chǔ)格式來找到這個(gè)n確實(shí)是我沒想到的,想出這個(gè)解法的人思維很發(fā)散。
2008-07-21 15:51 | wolfssss

# re: 如何使用位操作得到大于N且為2的次方的最小的數(shù)  回復(fù)  更多評(píng)論   

@wolfssss
float f = (float)(v - 1);
v減不減一的區(qū)別在于

float f = (float)(v - 1);
求的是大于等于N且為2的次方的最小的數(shù)

float f = (float)(v);
求的是大于N且為2的次方的最小的數(shù)
2011-10-16 12:16 | 楚天清秋

# re: 如何使用位操作得到大于N且為2的次方的最小的數(shù)  回復(fù)  更多評(píng)論   

可以下ieee 754 就明白了
2013-02-22 17:07 | mankeyl
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线观看视频一区二区| 亚洲欧美一区二区三区久久| 久久精品在线| 新狼窝色av性久久久久久| 中文精品99久久国产香蕉| 99精品99| 欧美一区1区三区3区公司| 久久精品夜色噜噜亚洲aⅴ| 免费不卡欧美自拍视频| 欧美日韩日本国产亚洲在线| 国产精品一区二区三区久久| 欧美亚洲一区二区三区| 欧美日韩中文字幕日韩欧美| 免费视频一区| 欧美大香线蕉线伊人久久国产精品| 老司机精品导航| 亚洲日本成人女熟在线观看| 一区二区三区日韩精品| 久久精品国产91精品亚洲| 欧美激情在线免费观看| 国产日产欧美精品| 91久久久在线| 久久久久国产一区二区三区四区| 欧美gay视频| 99热精品在线观看| 久久久久久久综合| 欧美网站在线观看| 亚洲伦理精品| 猛男gaygay欧美视频| 一本色道久久综合一区| 久久夜色精品国产欧美乱| 国产精品女主播| 一个人看的www久久| 久久先锋影音| 亚洲女ⅴideoshd黑人| 欧美福利视频一区| 影音先锋在线一区| 欧美一区二区三区免费观看视频| 亚洲精品一区二区三区99| 久久久久免费| 激情国产一区| 久久久久久一区| 亚洲欧美日韩精品久久| 国产精品久久999| 亚洲综合欧美| 亚洲午夜精品一区二区| 欧美视频精品一区| 亚洲女ⅴideoshd黑人| 一区二区三区av| 欧美亚州一区二区三区 | 亚洲高清一区二| 久久精品夜色噜噜亚洲aⅴ| 国产欧美一区在线| 欧美在线视频在线播放完整版免费观看| 亚洲欧洲中文日韩久久av乱码| 久热成人在线视频| 亚洲电影第三页| 亚洲成色777777女色窝| 欧美国产精品一区| 精久久久久久| 久久蜜桃av一区精品变态类天堂| 先锋亚洲精品| 狠狠色噜噜狠狠狠狠色吗综合| 久久精品亚洲| 久久久久一区二区| 午夜综合激情| 久久午夜电影网| 好看的日韩视频| 久久综合色播五月| 猫咪成人在线观看| 日韩亚洲成人av在线| 亚洲精品久久视频| 国产精品久久久久久久久久免费| 亚洲男人av电影| 欧美一区亚洲二区| 亚洲成人原创| 亚洲日韩欧美一区二区在线| 欧美视频网站| 久久久亚洲国产美女国产盗摄| 久久精品首页| 99re66热这里只有精品3直播| 一区二区三区精品视频| 国内视频精品| 亚洲第一福利社区| 欧美三区在线| 老色批av在线精品| 欧美日韩日日夜夜| 久久久午夜电影| 欧美伦理91| 久久久久看片| 欧美精品在线免费观看| 欧美一区2区三区4区公司二百| 久久久久久自在自线| 亚洲午夜久久久| 久久一区视频| 欧美一级夜夜爽| 久久黄色小说| 欧美成人tv| 久久久久久成人| 欧美视频一区| 欧美黑人在线观看| 国产欧美另类| 亚洲精选一区| 1024成人| 久久av一区二区三区| 中日韩在线视频| 欧美成人第一页| 欧美 日韩 国产精品免费观看| 欧美午夜三级| 亚洲国产日韩一区| 一区二区三区在线观看欧美| 亚洲一区二区精品在线观看| 亚洲理论电影网| 久久综合成人精品亚洲另类欧美| 性欧美办公室18xxxxhd| 欧美另类在线播放| 亚洲国产精品一区二区尤物区| 狠狠色狠色综合曰曰| 亚洲一区二区高清视频| 99热这里只有精品8| 久久综合一区二区三区| 老司机aⅴ在线精品导航| 国产亚洲毛片| 欧美一级理论性理论a| 亚洲欧美一区二区在线观看| 欧美三级电影大全| 一本色道久久88综合亚洲精品ⅰ| 亚洲精品久久久一区二区三区| 久久久999成人| 久久亚洲精品中文字幕冲田杏梨| 国产美女精品免费电影| 久久裸体艺术| 久久影视精品| 欧美+日本+国产+在线a∨观看| 国产日韩欧美91| 欧美一级二区| 久久一区欧美| 91久久久国产精品| 欧美sm视频| 亚洲韩国一区二区三区| 99精品视频免费| 欧美三级电影一区| 欧美三级在线视频| 国内精品久久久久久久97牛牛| 亚洲一区二区三区三| 欧美淫片网站| 国产一区二区三区自拍| 久久精品亚洲一区二区三区浴池| 久久在线免费观看| 亚洲人成网站影音先锋播放| 欧美福利视频在线| 一区二区三区视频在线观看 | 精品91免费| 欧美va天堂va视频va在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 国产精品欧美久久久久无广告| 在线视频一区二区| 久久激情一区| 亚洲国产日韩综合一区| 欧美日本韩国一区二区三区| 亚洲一区在线免费观看| 美女国内精品自产拍在线播放| 亚洲精品免费一二三区| 国产精品护士白丝一区av| 午夜日韩福利| 亚洲国产成人精品久久| 亚洲欧美国产毛片在线| 影音先锋日韩资源| 欧美深夜福利| 久久视频在线免费观看| 一本色道久久综合亚洲二区三区| 欧美在线观看www| 91久久久久久国产精品| 国产精品麻豆成人av电影艾秋| 久久精品噜噜噜成人av农村| 亚洲美女中文字幕| 美国十次成人| 亚洲在线免费| 亚洲精品久久7777| 国产一区二区你懂的| 欧美日韩视频不卡| 久久久之久亚州精品露出| 这里只有精品视频| 亚洲国产片色| 久久嫩草精品久久久精品| 日韩一级网站| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美日本中文字幕| 久久久久久久久久久久久女国产乱| 亚洲精品自在在线观看| 久久综合中文| 性欧美大战久久久久久久久| 亚洲毛片在线观看.| 亚洲第一区色| 国产在线精品一区二区中文| 日韩午夜在线| 欧美黄色成人网| 久久综合伊人77777尤物| 久久se精品一区二区| 亚洲一级在线观看|