c按位否定转换问题

ban*_*ana 3 c casting bit-manipulation

以下代码:

signed char sc = ~0xFC;
unsigned char uc = ~0xFC;
Run Code Online (Sandbox Code Playgroud)

编译时给我以下警告:

integer conversion resulted in truncation
integer conversion resulted in truncation
Run Code Online (Sandbox Code Playgroud)
  1. 为什么我会收到这些警告
  2. 我如何编写我的代码,以便我不会得到这些警告(不使用#pragmas)

感谢名单,

我正在使用IAR Compiler for 8051,

在使用其他编译器进行编译时,您会收到类似的警告吗?

Jac*_*ack 6

因为十六进制文字在写入时被视为int,所以0xFC为了避免警告,只需将它们强制转换为仅将1到12字节的数字:

~((char) 0xFC)
Run Code Online (Sandbox Code Playgroud)

0xFC0x000000FC在32位体系结构中被考虑,因此当您应用not not getting时0xFFFFFF03,这意味着当您将此结果分配给char时,3个最相关的字节将被丢弃,编译器会向您发出警告.