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;
    }

おすすめ

転載: blog.csdn.net/qq_39162566/article/details/113798720