C printf中的否定

C printf中的否定,c,mingw,C,Mingw,我有下面的代码,我不知道为什么printf内部的否定与外部的否定不同 char d=0x04; printf("Value of d= %X\n",~d); d=~d; printf("Value of d= %X\n",d); 打印的结果是FFFFFFB和FB。 这意味着,在printf中,表达式被转换为整数类型(默认提升),因此出现了4个字节 在执行~运算符的操作之前,它提升为int的操作数类型。这意味着在您的情况下:~0x04的结果将是0xfffffb,因为类型int的宽度似乎是32位

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

char d=0x04;
printf("Value of d= %X\n",~d);
d=~d;
printf("Value of d= %X\n",d);
打印的结果是FFFFFFB和FB。
这意味着,在printf中,表达式被转换为整数类型(默认提升),因此出现了4个字节

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

如果值
0xFFFFFB
被传递到printf,则不会升级到
int
,因为它已经是该类型的,并且会被打印出来

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