如何将CGFloat转换为无符号整数

时间:2010-12-04 21:22:38

标签: iphone objective-c stringwithformat cgfloat

我正在尝试使用CGFloat来获取字符串,类似这样......

helpMessage = [NSString stringWithFormat:@"The unsigned integer value is %i", (unsigned int)myCGFloat];

这不想工作。给定CGFloat值为-2,我在字符串中得到0。

如果我使用......

helpMessage = [NSString stringWithFormat:@"The unsigned integer value is %i", (int)myCGFloat];

我得-2。那越来越近了。所以我认为我可以使用@u作为格式说明符,但我得到了4294967294。

我做错了什么。

提前感谢您的帮助。这应该很容易。

约翰

3 个答案:

答案 0 :(得分:3)

您收到4294967294因为在将您的值转换为unsigned int之后,没有一点可用于表示-2的否定性,因此值“下溢“由2代替,可以这么说:

0
4294967295 (-1)
4294967294 (-2)

如果要显示负值,则应格式化为有符号整数(%i)。有符号的32位整数的范围是-21474836482147483647,而无符号的32位整数的范围是04294967295

答案 1 :(得分:1)

所以你试图将-2转换为unsigned int?无符号整数不能小于0.因此将被错误地表示。

答案 2 :(得分:1)

确定。谢谢你的答案,我想出来了......

helpMessage = [NSString stringWithFormat:@"The abasolute value is %i", abs((int)myCGFloat]);

我曾在CGFloat上直接尝试过abs,但我现在看到abs正在期待一个int值。我认为unsigned int与绝对值相同。谢谢你让我直截了当。

约翰