免费注册 查看新帖 |

Chinaunix

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

【求教】int64溢出问题!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-20 18:26 |只看该作者 |倒序浏览
a.cpp代码:   [aix操作系统]
#include <stdio.h>
#include <string>
#include <iostream>

using namespace std ;

int main()
{
   printf("int64 [%d]\n", sizeof(int64)) ;
   int64 tt = 10012493449 ;
   printf("tt=[%ld]\n", tt) ;
}

编译:
xlC_r -q32 a.cpp -o a32

报警告:
"a.cpp", line 7.20: 1540-0840 (W) The integer literal "10012493449" is out of range.

执行a32:
int64 [8]
tt=[0]


哪位大牛能帮忙分析一下,为什么int64是8字节长度, 而10012493449却溢出了???

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-04-20 18:38 |只看该作者
你试试lld。

论坛徽章:
0
3 [报告]
发表于 2006-04-20 18:44 |只看该作者
printf("tt=[%lld]\n", tt) ;

执行a32:
int64 [8]
tt=[1422558857]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-04-20 19:02 |只看该作者
int64 tt = 10012493449LL ;
要是还不行,我也没办法了。

论坛徽章:
0
5 [报告]
发表于 2006-04-20 19:10 |只看该作者
int64 tt = 10012493449ll ;
printf("tt=[%lld]\n", tt) ;

执行a32:
int64 [8]
tt=[10012493449]


这样可行,能否帮忙解释一下原因。

怎么10012493449不会自动转换为int64吗?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-04-20 19:24 |只看该作者
原帖由 llj 于 2006-4-20 19:10 发表
int64 tt = 10012493449ll ;
printf("tt=[%lld]\n", tt) ;

执行a32:
int64 [8]
tt=[10012493449]


这样可行,能否帮忙解释一下原因。

怎么10012493449不会自动转换为int64吗?

这个,恐怕得问写编译器的人怎么写的吧?
标准里面应该是会自动转换的。

论坛徽章:
0
7 [报告]
发表于 2006-04-20 20:22 |只看该作者
10012493449 是常数,具有 int 类型吧

论坛徽章:
0
8 [报告]
发表于 2006-04-21 00:32 |只看该作者
如果你编译时报溢出说明int64使用32位编译时这个整形还是4个字节的用 -q64编译选项试试;
如果不行的话,可以使用变通的办法:你的目的是使用8字节整数,使用long long来定义。

[ 本帖最后由 hkwang66 于 2006-4-21 00:35 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-04-21 12:19 |只看该作者
这个问题是在64位程序移植到32位时发现的,64位是没有问题。


怪的是打印出sizeof(int64)是8字节,而编译时(赋值操作),int64怎么又变为4字节。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2006-04-21 12:31 |只看该作者
win_hate不是已经告诉你了吗?
10012493449 作为常数,默认就是个int型,在32位机上超出int型的范围了
要表示一个长整数,应该写成10012493449ll
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP