RT,比如輸入10返回16, 輸入24返回32,等等.
注意,是使用位操作且沒(méi)有循環(huán),也不用表驅(qū)動(dòng)等等.因?yàn)檫@個(gè)操作要經(jīng)常進(jìn)行,要保證高效,所以不能使用循環(huán)(別跟我說(shuō)用遞歸,熟悉算法和計(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è)詳盡的解釋,在這里先感謝了.