GCC 4.1.2:错误:整型常量对于' long '类型来说太大
gcc 4.1.2: error: integer constant is too large for ‘long’ type
我编译了一段关于哈希函数的代码,得到错误:整数常数对于' long '类型太大。我谷歌了一下,它说要加上后缀"ULL",但我确实把ULL作为后缀。这个后缀只有gcc 4.4.1支持,我的机器上只有gcc 4.1.2,我不允许安装新的编译器。有没有办法改变代码来解决问题?
谢谢,托尼
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);
}
1099511628211
对于(32位)long
来说也太大了;再加上ULL
后缀
AFAIK, GCC 4。x支持所有x的long long
。实际上,我会说GCC 3。x支持long long
,至少对于x最近的值。
我很难让你的代码触发任何警告,在32位或64位模式下使用MacOS X 10.7.2上的g++ 4.6.1。然而,我可以从XCode 4的LLVM编译器中得到投诉。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)
开始)在我添加第二个ULL
之前不会抱怨,但只有当我在32位模式下编译时。如果在64位模式下使用,它也不会报错。
您可以编写一个计算结果相同的常量表达式:
unsigned long long x = 1469598103UL*10000000000+9346656037UL;
使用g++ 4.2.1编译
试试这个:
#define HIGHER_BITS 0xcbf29ce4
#define LOWER_BITS 0x84222325
unsigned long long x = (HIGHER_BITS << 32) | LOWER_BITS;
这两个数字是用这个示例程序得到的:
#include <stdio.h>
#include <limits.h>
int main(int argc, char **argv)
{
unsigned long long x = 14695981039346656037ULL;
printf("0x%08llx, 0x%08llxn", x >> 32, x & UINT_MAX);
}
相关文章:
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 自动类型默认为 int 而不是 long
- Visual studio 2013 和 g++ 7.1 中将 int 和 long 类型相乘时的 c++ 差异行为
- 错误:将"long int (*)[4]"分配给"long int [4][4]"时的类型不兼容
- 如果在我的机器上 sizeof(long) == sizeof(long long),为什么它们不是同一类型?
- 使用 GCC 和 C++11 实施类型 "long double"
- 我有 3 个错误:期望一个")",期望一个表达式,long 类型的参数与 U32 类型的参数不兼容
- 为什么 shared_ptr<T>::use_count() 返回 long 而不是无符号类型?
- 将大于long类型的最大值的值传递给C中的fseek
- GCC 4.1.2:错误:整型常量对于' long '类型来说太大
- 后缀LL表示long long类型
- 在Xcode中,将unsigned long类型向下转换为需要c++ int类型的方法
- 将C++long类型转换为JNIjlong
- 如何将LONG类型强制转换为CString类型
- 将long类型的number传递给函数(引用vs值)(c++)
- 从union中的long类型强制转换为char*类型,然后再返回,会做什么?
- 在搜索大质数时,整数常数对于' long '类型来说太大
- 为什么要将float类型的指针转换为long类型的指针,然后解引用呢?
- 无法打印存储在 long long 类型的变量中的一些大值