从NSUInteger到浮点数的奇怪转换
我有以下代码:
NSUInteger one = 1;
CGPoint p = CGPointMake(-one, -one);
NSLog(@"%@", NSStringFromCGPoint(p));
它的输出:
{4.29497e+09, 4.29497e+09}
另一方面:
NSUInteger one = 1;
NSLog(@"%i", -one); // prints -1
我知道可能会出现某种溢出,但为什么这两种情况不同,为什么它不能按我想要的方式工作?即使在做琐碎的算术时,我是否应该总是提醒自己我的变量和表达式的特定数字类型?
附:当然我可以使用unsigned int
而不是NSUInteger
,没有任何区别。
没有找到相关结果
已邀请:
2 个回复
碉罕城爸
应用于无符号值时,无符号值将被取消,然后通过重复添加that6ѭ将其强制转换为无符号值。当你将它传递给
时,那个(非常大的)无符号值然后被分配给
。 您没有在
语句中看到这一点,因为您将其记录为有符号整数。将其转换回有符号整数,确实得到-1。尝试使用
,你会发现你回到了
。
与
有所不同:
是LP64架构(x86_64,ppc64)下
的一半大小,或者当你用
定义编译时。
总是指针大小(但如果你真的需要一个指针大小的整数,则使用
!);当您使用LP64型号时,不是
。
田损比报