admin管理员组文章数量:1130349
C#语言 求最近数N的2次方数
将 N 和 最接近N且小于N的2次元数 以及 最接近N且大于N的2次元数 转换成 二进制 对比
看图不难发现 如果将N的尾数全部置1 然后+1 可以得到大于N且最接近N的 二次元数 Max
由 Max / 2 或者 右移一位得出 小于N且最接近N的二次元数Min
思路理清了 那接下来我们动手开始撸吧~
第一步 将N的所有位置1
// 公式: 将X的第N位置1
//原理很简单 大家对下二进制就知道了 这里不过多阐述
x = x | (1 << n)
代码如下:
N|= N >> 1;
N |= N >> 2;
N |= N >> 4;
N |= N >> 8;
N |= N >> 16;
第二步 将N自增1 得到 大于N且最近就N的2次方数
++N;// 得到大于N 且 最接近N的二次方数
第三步 将N右移1位 得到 小于N且最接近N的2次方数
N>>=1;// 得到小于N 且 最近就N的二次方数
完整代码
//得到最接近 into 且大于into的二次方数public static int get2powHigh( int into ){--into;//避免正好输入一个2的次方数into |= into >> 1;into |= into >> 2;into |= into >> 4;into |= into >> 8;into |= into >> 16;return ++into;}//得到最接近 into 且小于into的二次方数public static int get2powLow(int into){return get2powHigh(into) >> 1;}
C#语言 求最近数N的2次方数
将 N 和 最接近N且小于N的2次元数 以及 最接近N且大于N的2次元数 转换成 二进制 对比
看图不难发现 如果将N的尾数全部置1 然后+1 可以得到大于N且最接近N的 二次元数 Max
由 Max / 2 或者 右移一位得出 小于N且最接近N的二次元数Min
思路理清了 那接下来我们动手开始撸吧~
第一步 将N的所有位置1
// 公式: 将X的第N位置1
//原理很简单 大家对下二进制就知道了 这里不过多阐述
x = x | (1 << n)
代码如下:
N|= N >> 1;
N |= N >> 2;
N |= N >> 4;
N |= N >> 8;
N |= N >> 16;
第二步 将N自增1 得到 大于N且最近就N的2次方数
++N;// 得到大于N 且 最接近N的二次方数
第三步 将N右移1位 得到 小于N且最接近N的2次方数
N>>=1;// 得到小于N 且 最近就N的二次方数
完整代码
//得到最接近 into 且大于into的二次方数public static int get2powHigh( int into ){--into;//避免正好输入一个2的次方数into |= into >> 1;into |= into >> 2;into |= into >> 4;into |= into >> 8;into |= into >> 16;return ++into;}//得到最接近 into 且小于into的二次方数public static int get2powLow(int into){return get2powHigh(into) >> 1;}
本文标签: C语言 求最近数N的2次方数
版权声明:本文标题:C#语言 求最近数N的2次方数 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1700722007a366268.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论