【发布时间】:2016-10-05 17:46:02
【问题描述】:
为什么我得到 0 ?和编译器警告:
格式“%d”需要“int”类型的参数,但参数 3 的类型为“long unsigned int”
代码如下:
#include <stdio.h>
//function declerations...
int power(int base, int on);
int main(void) {
printf("%d",power(2, sizeof(int)*8)-1);
return 0;
}
int power(int base, int on) {
int pf = 1;
for (int i = 0; i < on; i++) {
pf *= base;
}
return pf;
}
如果 int 在我的系统上是 4 个字节,我猜想我应该能够将 4294967295 存储在 unsigned int 中。
【问题讨论】:
-
了解
limits.h。不要依赖假设(顺便说一句,你错了)。 -
你忘记了冰山的另一部分:负数
-
@Jean-FrançoisFabre:冰山有 90% 在水下。有符号整数有一个(n 几乎)对称范围。
-
对不起,我混淆了签名和未签名
-
你的问题很困惑。请更正!