为什么这种数据类型表现得很奇怪?

时间:2018-01-30 04:41:40

标签: c int printf

为什么第一个printf()只返回值-536870912,第二个返回unsigned int的最大值与乘以65535 * 65535的结果之间的差值。(运行64位机器) )。

int x = 7 * 536870912;

printf("%d\n", x);// 536,870,912
//answer: 3,758,096,384 - 3 Billion
//returns : - 536870912

printf("%d\n", 65535 * 65535 );// 65,535
// answer : 4,294,836,225 4 Billion
// returns: -131071

1 个答案:

答案 0 :(得分:6)

通常,即使在64位系统上,int类型仍然是带符号的32位类型。您可以通过打印sizeof(int)轻松验证它。如果你想要更多,那么使用保证至少为64位的long long

小心long,它可能是64位,也可能只是32位。使用long long