printf 中的否定

Negation inside printf

我有下面的代码,但我不确定为什么 printf 内部的否定与外部的否定不同?

char d=0x04;
printf("Value of d= %X\n",~d);
d=~d;
printf("Value of d= %X\n",d);

打印出来的结果是FFFFFFFB和FB。 这意味着我可以说,在 printf 内部,表达式被转换为整数类型(默认提升),因此出现了 4 个字节!

在执行~运算符的操作之前,它提升为int的操作数的类型。这意味着结果: ~0x04 在您的情况下将是 0xFFFFFFFB,因为类型 int 的宽度似乎是 32 位。

如果值 0xFFFFFFFB 被传递给 printf,它不会被提升为 int,因为它已经是那个类型,并且它被打印出来。

如果将 0xFFFFFFFB 分配回 d,则以实现定义的方式完成从 intchar 的转换。在您的情况下,结果值为:0xFB。当 d 传递给 printf 时,它被提升为 int,提升为 int0xFB 的值保持不变,并被打印出来。