5

我取一个整数,在本例中为 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(为清楚起见添加了逗号)

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

4

3 回答 3

17

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

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

于 2012-04-22T23:24:38.563 回答
10

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

%d将其转换回带符号的 int。

于 2012-04-22T23:24:35.400 回答
7

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

于 2012-04-22T23:25:04.753 回答