在第44页,K& R的C编程语言中,它在底部说:
例如,假设int是16位而long是32位。然后-1L< 1U,因为1U是int,被提升为有符号长整数。但是-1L> 1UL,因为-1L被提升为无符号长,因此看起来是一个大的正数。
我真的不知道那是在说什么。我认为这是比较比特,但我真的不知道。你能描述一下这是在讨论什么吗?
P.S。我是C的小伙伴.C是我的第一个编程语言。那么,您能否尽可能轻松地回答这个问题?谢谢。
答案 0 :(得分:4)
在C中,相同的基本位0xffff
有两个不同的值。
如果您将16位数字视为“已签名”,则0xffff
为-1,如果为“无符号”,则0xffff
为65535。
当您将有符号值与无符号值进行比较时,有符号值中的位被视为“无符号”,如果值为负,则新值可能不是您想要的值。