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的吧,精度扩展是一定要发生的,除非用字符串来实现。
#include <stdio.h>
#include <limits.h>
int main(void)
{
unsigned long i = ULONG_MAX;
char s[50]={0};
sprintf(s, "%llu", ((unsigned long long)i + 1));
printf("%s\n", s);
return 0;
}
复制代码
而且 long long 是C99才有的, gcc编译的时候要使用
[gaohu@tigertall p]$ gcc -std=c99 inttest.c
复制代码
才能编译的
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2