免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2586 | 回复: 2
打印 上一主题 下一主题

unsigned long超限的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-30 20:52 |只看该作者 |倒序浏览
unsigned long的最大上限是:4294967296,但我又不想用unsigned long long的类型

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

如果直接 i+=1的话,那i 就会溢出成为0, 记得有种方法是用sprintf的写进char类型的数组里面,然后在进行 %s的输出即可达到,但忘记怎样做了,望资深老大指教。

论坛徽章:
0
2 [报告]
发表于 2010-11-30 21:28 |只看该作者
在线等

论坛徽章:
0
3 [报告]
发表于 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
复制代码
才能编译的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP