打印c. 中的波浪运算符



我知道~运算符不是,所以它反转二进制数中的位

unsigned int a = ~0, b = ~7;
printf("%dn",a);
printf("%dn",b);
printf("%un",a);
printf("%un",b);

我猜0将是1,7(0111)将是8(1000),但输出是

-1
-8
4294967295
4294967288

~0和~7是怎么变成-1和-8的?为什么%u要打印这么长的数字?

~运算符只是对数字中的所有位进行反转。

在大多数现代编译器中,int的大小为32位,而带符号的int使用2的补码表示。这意味着,除其他事项外,高位保留给符号,如果该位为1,则该数字为负。

07int字面值。假设如上所述,我们得到以下结果:

  • 0是位00000000000000000000000000000000b
    =0当被解释为signed intunsigned int

  • ~0是位11111111111111111111111111111111b
    =-1当被解释为signed int
    =4294967285当被解释为unsigned int

  • 7是位00000000000000000000000000000111b
    =7当被解释为signed intunsigned int

  • ~7是位11111111111111111111111111111000b
    =-8当被解释为signed int
    =4294967288当被解释为unsigned int

在您的printf()语句中,%d将其输入解释为signed int,%u将其解释为unsigned int。这就是为什么你会看到你得到的结果。

~运算符对整型操作数的所有位进行反转。例如,int是32位的,1是十六进制的0x00000001,它的补码是0xFFFFFFFE。当被解释为无符号时,它是4 294 967 294,作为2的补符号,-2。

相关内容

  • 没有找到相关文章

最新更新