[英]c bitwise negation conversion question
以下代码:
signed char sc = ~0xFC;
unsigned char uc = ~0xFC;
编译时给我以下警告:
integer conversion resulted in truncation
integer conversion resulted in truncation
感谢名单,
我正在使用IAR Compiler for 8051,
在使用其他编译器进行编译时,您会收到类似的警告吗?
因为十六进制文字在写入时被认为是int,就像你做的那样0xFC
..为了避免警告,只是0xFC
它们将数字截断为仅1个字节:
~((char) 0xFC)
0xFC
被认为是0x000000FC
在32位架构,所以当你申请你不获得0xFFFFFF03
,这意味着,当你这个结果赋值给一个char 3个最相关的字节只是被丢弃,而编译器警告你一下吧。
在C中,算术至少以int
的大小进行。 这意味着, ~0xFC
将返回一个int
。 更重要的是,这个值是0xFF03
,这超出了char
(有符号或无符号)的范围。
因此,赋值将给出两个警告。 你可以试试
signed char sc = ~0xFC & 0xFF;
查看编译器是否知道结果在char
范围内(gcc在添加& 0xFF
后不会抱怨)。 您还可以尝试添加显式强制转换:
signed char sc = (signed char)~0xFC;
// also possible:
// signed char sc = ~(signed char)0xFC;
或者,由于价值可以很容易地计算出来,为什么不呢
signed char sc = 3;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.