objective-c - "unsigned int"打印为负数?

标签 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(为清楚起见添加了逗号)

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

最佳答案

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

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

关于objective-c - "unsigned int"打印为负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10273047/

相关文章:

objective-c - 您可以通过编程方式在 Mac OS 的内置词典中查找单词吗?

objective-c - 从类方法分配/释放指向数组的指针

ios - 在 Ios 中排序时间范围

ios - 具有相对约束的自动布局不影响 systemLayoutSizeFittingSize : for UITableViewCell

iphone - iPhone ARKit 中的位置在一处重叠

objective-c - 父子协议(protocol)关系和 ObjC 可用性

objective-c - 在 NSView 中绘制大量数据,或者其他?

objective-c - 检查空的 NSSet?

ios - 如何在 ios 的歌曲加载时间中显示或隐藏事件指示器

objective-c - NSObject init 总是被调用吗?