我有一点问题。本质上,代码:uint64_t的容量?
uint64_t myInteger = 98930 * 98930;
NSLog(@"%qu", myInteger);
...只是错了。我得到'1197210308'作为输出,这显然是不正确的。这是为什么发生?它不可能是uint64_t太小,因为它们显然上升到18 and a half quintillion。任何人有任何想法?
我有一点问题。本质上,代码:uint64_t的容量?
uint64_t myInteger = 98930 * 98930;
NSLog(@"%qu", myInteger);
...只是错了。我得到'1197210308'作为输出,这显然是不正确的。这是为什么发生?它不可能是uint64_t太小,因为它们显然上升到18 and a half quintillion。任何人有任何想法?
尝试铸造的第一个号码,这样的操作是使用类型进行:
uint64_t myInteger = (uint64_t)98930 *98930;
我不知道很多关于客观-C,但在C做同样的,整数促销停在整数排名,所以你得到一个整数溢出。尝试:
uint64_t myInteger = 98930LLU * 98930;
98930是int
,所以你乘以2个int
s,这给出了一个int
。然后,您将分配给uint64_t
,但已经太迟了,您已经失去了精确度。确保其中一个操作数的类型为uint64_t
,所以另一个将被强制为该类型,并且乘法将作为uint64_t
乘法完成。
这解释得很好,谢谢! – 2010-07-21 20:55:37
或者:'uint64_t myInteger = 98930UL * 98930UL;' – 2010-07-21 20:45:56
就是这样。它现在有效。谢谢! – 2010-07-21 20:52:50
甚至更好:UINT64_C(98930)* UINT64_C(98930) – nall 2010-07-21 21:16:38