我有点问题。基本上,代码:
uint64_t myInteger = 98930 * 98930;
NSLog(@"%qu", myInteger);
......只是弄错了。我得到'1197210308'作为输出,这显然是不正确的。为什么会这样?它不能是因为uint64_t太小,因为它们显然达到了18 and a half quintillion。有人有任何想法吗?
答案 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;