您将显式或隐式地将 sa “long long”或“unsigned long long”传递给 printf,这就是您收到警告的原因——但稍后会详细介绍;
生成一个 10 位随机数,你需要切换到 64 位——这么久;
unsigned long long randomvalue;
randomvalue = random();
randomvalue <<= 16; // just picked 16 at random
randomvalue ^= random(); // you could also use + but not "or";
randomvalue %= 10000000000ULL;
您收到的警告是因为您将 type 的值long long
作为第三个参数传递给printf
函数,但您仍然使用"%u"
格式,这使得printf
expect 的值是 type unsigned int
。
要使警告静音,请将格式更改为"%lld"
.
它不会帮助您创建一个比2147483647
虽然高的十位数字,因为rand
返回一个int
到目前为止最多为 32 位的数字,即使在 64 位平台上也是如此。价值2147483647
从何而来?如果是带符号的 32 位整数,则为最大正值。