-1与sprintf()一起显示为4294967295

时间:2014-04-17 20:48:22

标签: c

在我的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。这可能是什么问题?

1 个答案:

答案 0 :(得分:1)

如果x是无符号整数\ long那就是应该发生的事情,因为〜-1(2s补码)是2 ^ 32-1