C -1与sprintf()一起显示为4294967295
在我的64位Linux发行版上,当我执行以下代码时:C -1与sprintf()一起显示为4294967295,c,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,这是正确的结果 更让人困惑的是,我已经在
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。这里可能有什么问题?如果x是一个无符号的int\long,那么应该是这样的,因为~-1 2s补码是2^32-1x是什么类型的?你很可能是在类型系统上进行了黑客攻击。@self它是longNote类型:sprintf buf,%d,x;->我得到-1,这是正确的结果。这是不正确的。在本例中,x是长的,并且说明符%d代表int。结果是未定义的行为。在给定的平台上,它可以按需要工作,但基本上是糟糕的C代码。第一种情况可能是未正确发布,或者平台不符合C。它不是无符号长,只是一个长整型。