我编译了一段关于哈希函数的代码并得到了错误:整数常量对于'long'类型来说太大了.我做谷歌它,它说添加后缀"ULL",但我确实有ULL作为后缀.这个后缀仅由gcc 4.4.1支持,我在机器上只有gcc 4.1.2,我不允许安装新的编译器.有没有办法改变代码,以解决问题?
谢谢,-Tony
unsigned long long hash(string k){ //FNV hash
unsigned long long x = 14695981039346656037ULL;
for (unsigned int y=0;y<k.length();y++){
x = x ^ (k[y]);
x = x * 1099511628211;
}
return (x);
}
Run Code Online (Sandbox Code Playgroud)
1099511628211(32位)也太大了long; 在ULL那里添加后缀.
AFAIK,GCC 4. x支持long long所有x.事实上,我会说,海湾合作委员会3 X的支持long long,至少在最近的值X.
我很难让你的代码在32位或64位模式下使用GOS 4.6.1在MacOS X 10.7.2上触发任何警告.但是,我可以从XCode 4.x(g++ --version输出开始i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00))获得LLVM编译器的抱怨,直到我添加第二个ULL,但只有在32位模式下编译时才会抱怨.如果在64位模式下使用它,它也不会抱怨.
| 归档时间: |
|
| 查看次数: |
7370 次 |
| 最近记录: |