【问题标题】:Type conversion with unsigned operands- C使用无符号操作数进行类型转换 - C
【发布时间】:2013-11-26 05:45:24
【问题描述】:

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

例如,假设 int 是 16 位,long 是 32 位。然后 -1L 1UL,因为 -1L 被提升为 unsigned long,因此看起来是一个很大的正数。

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

附:我真的是 C 的菜鸟。C 是我的第一门编程语言。那么,您能尽可能简单地回答这个问题吗?谢谢。

【问题讨论】:

    标签: c type-conversion


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。这很有帮助。
    猜你喜欢
    • 2018-08-14
    • 2011-01-22
    • 2012-10-27
    • 2013-02-06
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    相关资源
    最近更新 更多