我们知道4294967295是unsigned int
中最大的数字,如果我将这个数字乘以它然后如何显示它?我试过了:
long unsigned int NUMBER = 4294967295 * 4294967295;
但仍然得到1作为答案。
答案 0 :(得分:3)
你正在溢出。考虑十六进制的muplication:
0xffffffff * 0xffffffff == 0xfffffffe00000001
^^^^^^^^
only the last 32 bits are returned
解决方案是使用更大的类型,例如long long unsigned
:
long long unsigned int NUMBER = 4294967295ULL * 4294967295ULL;
后缀ULL
表示unsigned long long
。
查看在线工作:ideone
答案 1 :(得分:1)
乘法溢出。
#include <stdio.h>
int main()
{
unsigned int a = 4294967295;
unsigned int b = 4294967295;
// force to perform multiplication based on larger type than unsigned int
unsigned long long NUMBER = (unsigned long long)a * b;
printf("%llu\n", NUMBER);
}
答案 2 :(得分:0)
您在问题中指出,您知道max int等于4294967295.这意味着如果使用unsigned int,则无法存储大于该数字的数字。
C长在64位unix系统 [source] 上无符号存储时最多可存储18,446,744,073,709,551,615所以你只需要用UL后缀你的数字:4294967295UL
如果您没有使用64位unix系统,那么您应该使用long long unsigned int
和后缀LL
答案 3 :(得分:-1)
是的,这是一个溢出。如果你正在使用c,那么没有任何简单的方法可以像我所知的那样大量繁殖。也许你需要自己写一个。事实上,一些语言最初支持这样的功能。