“unsigned int”打印为负数?

时间:2012-04-22 23:22:53

标签: objective-c

我正在取一个整数,在这种情况下是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(为清晰起见,添加了逗号)

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

3 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:10)

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

%d将其转换回已签名的int。

答案 2 :(得分:7)

%d表示&#34;有符号整数&#34 ;;使用%u表示&#34;无符号整数&#34;。

相关问题