奇怪了,unsigned int的数<<9,返回long long类型的结果出错呢?

OverIsOver 2006-11-30 06:47:07
long long q;
unsigned int dw=21928725;
q = (long long)dw<<(long long)9;
printf("dw:%u, q:%lld\n", dw, q);

显示的结果是 dw :21928725, q: -1657394688
我用计算器算出来是q: 11125107200
long long 8 none (but equivalent to __int64) –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

请问为什么会出错呢?谢谢指点一二了 :)
...全文
135 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
OverIsOver 2006-12-01
  • 打赏
  • 举报
回复
晕掉,原来是minGW的bug :(
========================
回复: 怎么用long long
由吴垠发表于2006年10月29日 星期日 19:23
实际上是%lld的。
但是如果用的是mingw的gcc/g++,需要用%I64d。这是mingw的bug,windows操作系统下才有的,%lld会出现错误。
但是如果提交的话,还是要用%lld,本机用%I64d,除非你机器上装的是linux。

OverIsOver 2006-12-01
  • 打赏
  • 举报
回复
q = ((long long)dw)<<((long long)9);

连这样都还是会出错啊,上面的不行哦~~
无知者无谓 2006-11-30
  • 打赏
  • 举报
回复
无符号对有符号数强制转换的问题,你试试q = ((long long)dw)<<9;

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧