Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C -1与sprintf()一起显示为4294967295_C - Fatal编程技术网

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

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,这是正确的结果 更让人困惑的是,我已经在

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

如果x是一个无符号的int\long,那么应该是这样的,因为~-1 2s补码是2^32-1

x是什么类型的?你很可能是在类型系统上进行了黑客攻击。@self它是longNote类型:sprintf buf,%d,x;->我得到-1,这是正确的结果。这是不正确的。在本例中,x是长的,并且说明符%d代表int。结果是未定义的行为。在给定的平台上,它可以按需要工作,但基本上是糟糕的C代码。第一种情况可能是未正确发布,或者平台不符合C。它不是无符号长,只是一个长整型。