【问题标题】:"unsigned int" prints as a negative number?“unsigned int”打印为负数?
【发布时间】:2012-04-22 23:22:53
【问题描述】:

我取一个整数,在本例中为 192,并将其左移 24 个空格。似乎是前导 1 导致它变为负数。

unsigned int i = 192;
unsigned int newnumber = i << 24;
NSLog(@"newnumber is %d",newnumber);

我期待 3,221,225,472 但我得到 -1,073,741,824(为清楚起见添加了逗号)

无符号整数不应该是负数吧?

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    因为您在NSLog重新解释它作为有符号整数。您应该使用%u 来查看无符号值。

    具有可变数量参数的函数无法确定您传递的值的类型。这就是为什么NSLog 依赖格式字符串来了解您传递了多少参数以及它们的类型。如果您传递的类型与相应的格式说明符不匹配,NSLog 将信任说明符并根据它解释您的数据。现代编译器甚至可能会警告您。

    【讨论】:

    • 啊哈。完全有道理。我以为我疯了。谢谢!
    【解决方案2】:

    你想做NSLog(@"newnumber is %u",newnumber);

    %d 将其转换回有符号整数。

    【讨论】:

      【解决方案3】:

      %d 表示“有符号整数”;使用%u 表示“无符号整数”。

      【讨论】:

        猜你喜欢
        • 2018-06-30
        • 2011-02-17
        • 1970-01-01
        • 1970-01-01
        • 2019-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-23
        相关资源
        最近更新 更多