【发布时间】:2023-03-20 09:28:01
【问题描述】:
#include <stdio.h>
int main() {
unsigned char a = 5;
printf("%d\n",~a);
printf("%d\n",a=~a);
return 0;
}
根据此处接受的答案 Negation inside printf ,在第一个 printf 中,a 应该被提升为 int 并且输出应该是一个很大的负数。但是第一个 printf 的输出是 -6。您能解释一下为什么输出是 -6 以及为什么在这种情况下 char 没有提升为 int 吗?
【问题讨论】:
-
你为什么期望一个巨大的负数?在链接的问题中,
FFFFFFFB被打印出来,即十六进制的-5。 -
@AdrianMole 我说的是 OP 链接到的问题,而不是这个问题。
-
!是逻辑否定。-是算术否定。~是按位补码。 -
"并且输出应该是一个很大的负数。" --> 不完全。
标签: c bitwise-operators negation integer-promotion