Chinaunix

标题: unsigned long超限的问题 [打印本页]

作者: gejiajie_01    时间: 2010-11-30 20:52
标题: unsigned long超限的问题
unsigned long的最大上限是:4294967296,但我又不想用unsigned long long的类型

unsigned i=4294967296;
要令 i+1后输出 = 4294967297应该怎样做?

如果直接 i+=1的话,那i 就会溢出成为0, 记得有种方法是用sprintf的写进char类型的数组里面,然后在进行 %s的输出即可达到,但忘记怎样做了,望资深老大指教。
作者: gejiajie_01    时间: 2010-11-30 21:28
在线等
作者: tigerheight    时间: 2010-12-01 13:09
首先 ULONG_MAX的值是 4294967295, 不是4294967296。

不知道为什么不使用long long呢,是不想用还是不能用啊?

那种也是需要强制转换成 long long的吧,精度扩展是一定要发生的,除非用字符串来实现。

  1. #include <stdio.h>
  2. #include <limits.h>

  3. int main(void)
  4. {
  5.                 unsigned long i = ULONG_MAX;
  6.                 char s[50]={0};
  7.                 sprintf(s, "%llu", ((unsigned long long)i + 1));
  8.                 printf("%s\n", s);
  9.                 return 0;
  10. }
复制代码
而且 long long 是C99才有的, gcc编译的时候要使用

  1. [gaohu@tigertall p]$ gcc -std=c99 inttest.c
复制代码
才能编译的




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2