c语言无符号整数

#include<stdio.h>

unsigned fac(unsigned  n);

int main(){
  unsigned num;
  scanf("%u", &num);
  while( num < 0) {
    scanf("%u",&num);
  }
  printf("%u", fac(num));
  return 0;
}

unsigned fac(unsigned  n){
  unsigned f;
  if (n == 0) {
    f = 1;
  } else{
    f = fac(n-1) * n;
  }
  return f;
}

这个代码中 f 是无符号整形,但是运行时返回值最大却只有2147483648,是无符号整形的一半,这是什么原因呢?

还有一个这个程序写成汇编的问题,大家能否帮我看一下,谢谢了
https://segmentfault.com/q/10...

阅读 3.9k
3 个回答

用阶乘去验证不觉得有问题吗

你可以用limits.h看一下你系统里最大数的相关定义, 注释里是我系统下的大小

#include<stdio.h>
#include<limits.h>
int main(){
    printf("%u\n",UINT_MAX); // 4294967295
    printf("%u", INT_MAX);  // 2147483647
    return 0;
}

无符号整形只能算到 12!= 479001600

13!= 6227020800 ,超过了 2^32 = 43亿

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进