使用无符号操作数键入转换-C

时间:2013-11-26 05:45:24

标签: c type-conversion

在第44页,K& R的C编程语言中,它在底部说:

  

例如,假设int是16位而long是32位。然后-1L< 1U,因为1U是int,被提升为有符号长整数。但是-1L> 1UL,因为-1L被提升为无符号长,因此看起来是一个大的正数。

我真的不知道那是在说什么。我认为这是比较比特,但我真的不知道。你能描述一下这是在讨论什么吗?

P.S。我是C的小伙伴.C是我的第一个编程语言。那么,您能否尽可能轻松地回答这个问题?谢谢。

1 个答案:

答案 0 :(得分:4)

在C中,相同的基本位0xffff有两个不同的值。

如果您将16位数字视为“已签名”,则0xffff为-1,如果为“无符号”,则0xffff为65535。

当您将有符号值与无符号值进行比较时,有符号值中的位被视为“无符号”,如果值为负,则新值可能不是您想要的值。