请问,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;
}