printf("%u \n",4294967296)在ubuntu服务器11.10上为i386输出0并显示警告

爱国者*_*爱国者 0 c ubuntu gcc

在ubuntu服务器11.10 for i386上,sizeof(int)是4,所以我猜4294967296是int类型的最大数量,不是吗?但是printf("%u\n",4294967296)输出0并带有警告:

警告:格式'%u'需要'unsigned int'类型的参数,但参数2的类型为'long long unsigned int'[ - Wformat]

有什么建议吗?

gcc的版本是(Ubuntu/Linaro 4.6.1-9ubuntu3)4.6.1

Oli*_*rth 8

4294967296正好是2 ^ 32,超出了支持的最大值(假定为32位).所以C将整数文字视为可以表示它的下一个整数类型().(我不知道为什么警告会抱怨它是).unsigned intlong long intlong long unsigned int

因此,您通过在格式说明符和参数类型之间提供不匹配来调用未定义的行为(实际上,您只是看到模数环绕).

将格式说明符更改为"%llu\n".