原帖由 llj 于 2006-4-20 19:10 发表
int64 tt = 10012493449ll ;
printf("tt=[%lld]\n", tt) ;
执行a32:
int64 [8]
tt=[10012493449]
这样可行,能否帮忙解释一下原因。
怎么10012493449不会自动转换为int64吗?
原帖由 yuxh 于 2006-4-21 12:31 发表
win_hate不是已经告诉你了吗?
10012493449 作为常数,默认就是个int型,在32位机上超出int型的范围了
要表示一个长整数,应该写成10012493449ll
原帖由 lenovo 于 2006-4-21 12:43 发表
在gcc中是没有问题的,
没看规范,不知道规范是不是规定会自动提升。
我猜想还是IBM编译器的问题。
Reading specs from /usr/lib/gcc/i686-pc-cygwin/3.4.4/specs
Configured with: /gcc/gcc-3.4.4/gcc-3.4.4-1/configure --verbose --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-languages=c,ada,c++,d,f77,java,objc --enable-nls --without-included-gettext --enable-version-specific-runtime-libs --without-x --enable-libgcj --disable-java-awt --with-system-zlib --enable-interpreter --disable-libgcj-debug --enable-threads=posix --enable-java-gc=boehm --disable-win32-registry --enable-sjlj-exceptions --enable-hash-synchronization --enable-libstdcxx-debug : (reconfigured)
Thread model: posix
gcc version 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
原帖由 yuxh 于 2006-4-21 13:44 发表
在AIX、HP-UNIX下不行,在Linux、Solaris下通过
99标准上说,不带后缀可以支持int、long int、long long int
保险一点,还是应该在long long型的常量后带LL
原帖由 win_hate 于 2006-4-21 14:36 发表
好多机器啊![]()
原帖由 win_hate 于 2006-4-21 14:28 发表
能支持,但会有警告:
复制代码
- #include <stdio.h>
- int main()
- {
- 0xfffffffff;
- }
cc 1.c
1.c: In function `main':
1.c:4: warning: integer constant is too large for "long& ...
原帖由 yuxh 于 2006-4-21 13:44 发表
在AIX、HP-UNIX下不行,在Linux、Solaris下通过
99标准上说,不带后缀可以支持int、long int、long long int
保险一点,还是应该在long long型的常量后带LL
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |