在我的64位Linux发行版中,当我执行此代码时:
long x ;
char buf[80];
x = (long)-1 ;
sprintf( buf, "%ld", x) ;
printf( buf ) ;
我得到4294967295,即2 ^ 32 -1。
然而,当我这样做时:
long x ;
char buf[80];
x = (long)-1 ;
sprintf( buf, "%d", x) ;
printf( buf ) ;
我得-1,这是正确的结果。
让我更加困惑的是,我在其他系统上试过这个,第一个在那里输出-1。这可能是什么问题?
答案 0 :(得分:1)
如果x是无符号整数\ long那就是应该发生的事情,因为〜-1(2s补码)是2 ^ 32-1