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次方数