uint64_t的容量?

时间:2010-07-21 20:39:30

标签: objective-c

我有点问题。基本上,代码:

uint64_t myInteger = 98930 * 98930;
NSLog(@"%qu", myInteger);

......只是弄错了。我得到'1197210308'作为输出,这显然是不正确的。为什么会这样?它不能是因为uint64_t太小,因为它们显然达到了18 and a half quintillion。有人有任何想法吗?

3 个答案:

答案 0 :(得分:9)

尝试转换第一个数字,以便使用该类型进行操作:

uint64_t myInteger = (uint64_t)98930 *98930;

答案 1 :(得分:8)

98930是int,因此您将两个int相乘,得到int。然后你分配给uint64_t,但为时已晚,你已经失去了精确度。确保其中一个操作数的类型为uint64_t,因此另一个操作数将被强制转换为该类型,并且乘法将以uint64_t乘法完成。

答案 2 :(得分:2)

我对Objective-C不太了解,但在C中做同样的事情,整数提升停在整数排名,所以你得到一个整数溢出。尝试:

uint64_t myInteger = 98930LLU * 98930;