我取一个整数,在本例中为 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(为清楚起见添加了逗号)
无符号整数不应该是负数吧?
我取一个整数,在本例中为 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(为清楚起见添加了逗号)
无符号整数不应该是负数吧?
因为您将其重新解释NSLog
为有符号整数。您应该使用%u
来查看无符号值。
具有可变数量参数的函数无法确定您传递的值的类型。这就是为什么NSLog
依赖格式字符串来了解您传递了多少参数以及它们的类型。如果您传递的类型与相应的格式说明符不匹配,NSLog
则会信任说明符并根据它解释您的数据。现代编译器甚至可能会警告您。
你想做NSLog(@"newnumber is %u",newnumber);
%d
将其转换回带符号的 int。
%d
表示“有符号整数”;用于%u
“无符号整数”。