1左移n

时间:2014-10-08 11:49:53

标签: c bit-shift

在这个等式中

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

我必须将shift 1保留为n的任何值,然后执行mod操作以包含int范围内的结果。但是1<<n没有为更大的n值显示正确的值,例如1000或10000.如何做?

1 个答案:

答案 0 :(得分:2)

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

如果你想使用像2 10000 这样的数字,你将不得不使用一个大的整数库(或自己编写),没有内置的数据类型可以处理准确的数字。

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