按位运算高级应用之如何实现以2为底的对数函数

按位运算高级应用之如何实现以2为底的对数函数C 中提供了各种功能的数学函数 比如三角函数 反三角函数 指数 对数 开方等等 那么这些函数到底是如何实现的呢 同一个函数又有哪些实现方法呢 计划接下来一段时间将以此为主题 将常用的数学函数用 C 重新实现一遍 今天的主题是 log 以 2 为底

大家好,欢迎来到IT知识分享网。

C++中提供了各种功能的数学函数,比如三角函数、反三角函数、指数、对数、开方等等,那么这些函数到底是如何实现的呢,同一个函数又有哪些实现方法呢?

计划接下来一段时间将以此为主题,将常用的数学函数用C++重新实现一遍。

今天的主题是log以2为底的对数函数如何实现?

自然C++的库函数里有log2、log、log10等函数可以直接使用,但我们想尝试下自己实现现一个log2函数?

经过摸索,实现了两个方法,实现如下:

方法一:比较简单

int lg[100]; lg[1] = 0; for(int i = 2; i <= 100; ++i) lg[i] = lg[i >> 1] + 1;

这里利用2^0=1,而所有其他数字都可以除以2之后加1计算其对数。

方法二:取一个正整数的二进制的最高位1的所在位置即可

int getLg(int x) { int ans = 0; if(x & 0xffff0000) {ans += 16; x &= 0xffff0000;} if(x & 0xff00ff00) {ans += 8; x &= 0xff00ff00;} if(x & 0xf0f0f0f0) {ans += 4; x &= 0xf0f0f0f0;} if(x & 0xcccccccc) {ans += 2; x &= 0xcccccccc;} if(x & 0xaaaaaaaa) {ans += 1; x &= 0xaaaaaaaa;} return ans; }

使用时通过 cout << getLg(n)即可调用

仅供参考,欢迎留言

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/168610.html

(0)
上一篇 2025-01-26 13:05
下一篇 2025-01-26 13:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信