数值方面
对于下面这份代码
#include <cstdio>
using namespace std;
int k = 64;
const int k1 = 64;
int main()
{
printf("%llu\n", (1ull << 64) - 1);
printf("%llu\n", (1ull << k) - 1);
printf("%llu", (1ull << k1) - 1);
return 0;
}
运行后可以发现,第一行输出为18446744073709551615,第二行输出为0,第三行输出为18446744073709551615。
我不太明白为什么会有这样的差别
运行效率方面
这里有三份代码
int mod = 1000000007;
a = a % mod;
int mod = 1000000007;
a = a % 1000000007;
const int mod = 1000000007;
a = a % mod;
第一份代码运行起来是比第二份和第三份代码慢的,而第二份和第三份代码运行效率相近。
例如提交记录1和提交记录2,我仅仅将mod改为1000000007,代码运行时间就大幅降低。
百度上不好搜索,所以我只能来问问(
请问各位大佬知道这是怎么一回事吗?(也许跟运算中的类型转换有关?)