按位不在C中

按位不在C中,c,bitwise-operators,C,Bitwise Operators,我正在学习C语言,我想知道为什么下面的示例中的位不打印-1,~: #include <stdio.h> unsigned int u_n = 0; int main(void) { // your code goes here printf("%d\n", ~u_n); return 0; } #包括 无符号整数u_n=0; 内部主(空){ //你的密码在这里 printf(“%d\n”,~u\n); 返回0; } 通过使用%d格式说明符printf,您告诉它将无符号int

我正在学习C语言,我想知道为什么下面的示例中的位不打印-1,
~

#include <stdio.h>

unsigned int u_n = 0;

int main(void) {
// your code goes here

printf("%d\n", ~u_n);

return 0;
}
#包括
无符号整数u_n=0;
内部主(空){
//你的密码在这里
printf(“%d\n”,~u\n);
返回0;
}

通过使用
%d
格式说明符
printf
,您告诉它将
无符号int
值打印为
int

由于您的计算机很可能使用2的补码表示法表示整数,因此所有位都设置为1的值被解释为-1

另一方面,如果使用
%u
格式说明符,它会将值打印为未签名。根据
int
的大小,此值将为:

  • 65535(16位)
  • 4294967295(32位)
  • 18446744073709551615(64位)
%d
表示(签名)
int
,使用
%u