C语言 1 left shift by n



在此方程中

#define mod 1000000007
int n;
int num = ((1<<n)%mod)+2;

我必须将1左移n的任何值,然后执行mod运算以将结果包含在int的范围内。但对于更大的n值(如1000或10000),1<<n没有显示正确的值。怎么做?

您可以左移1的最大值为CHAR_BIT * sizeof(int) - 2。任何较大的数量都会导致未定义的行为。

如果你想处理像21000这样的数字,你必须使用一个大的整数库(或者自己编写),没有内置的数据类型可以准确处理这种数字。

另一种选择是使用更智能的算法进行模幂运算。

最新更新