首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请教,c语言中有没有能够直接求 以2为底数的库函数?谢谢

2012-03-04 
请问,c语言中有没有能够直接求 以2为底数的库函数?多谢。难道非要自己编写一个吗?有没有直接的库函数?我想

请问,c语言中有没有能够直接求 以2为底数的库函数?多谢。
难道非要自己编写一个吗?有没有直接的库函数?
我想求一个存储器的地址有多少位。请大家看看下面程序有没有需要改进的地方。多谢指教。

#include   "stdio.h "
main()
{
        int   i=1,mm;   /*   m:   memory   size*/
        int   s,   c=0;   /*   s:   quotient,c:   module   */
        printf( "Enter   the   size   of   main   memory   in   bytes:   ");
        scanf( "%d ",&mm);
        s   =   mm/2;
        c   =   mm%2;
        while(c==0)
        {
        s   =   s/2;
        c   =   s%2;
        i++;
        }
        printf( "The   address   bits   are   %d ",   i);
}

[解决办法]
假设log_y(x)为以y为底数的函数,由换底公式log_y(x) = log(x) / log(y), 所以把y换成2,有
log_2(x) = log(x) / log(2)
不过用整数的按位与的方法速度快的多!

#include <stdio.h>
#include <math.h>

int main(void)
{

int i;
unsigned int b;
unsigned int *pm;

/* memory size */
unsigned int mm[]={0xFFFFFFFF, 65537, 65536, 65535, 129, 128, 127, 0};

for (pm = mm; 0 != *pm; pm++)
{
b = 0x80000000;
for (i = 32; 0 == ( (*pm -1) & b) ; i--, b > > = 1)
{
;
}
(void) printf( "memory size = %10u,\taddress bits = %2d ", *pm, i);
printf( ", %u\n ", (unsigned int)ceil(log((double)*pm) / log(2) ));
}

return 0;
}

热点排行