1

我正在尝试使用 CGFloat 获取字符串,就像这样..

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

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

如果我用...

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

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

我究竟做错了什么。

提前感谢您的帮助。这应该是一件容易的事。

约翰

4

3 回答 3

3

你得到4294967294是因为在将你的值转换为 之后unsigned int,没有一点可以用来表示 的负数-2,所以值“下溢”了 2,可以这么说:

0
4294967295 (-1)
4294967294 (-2)

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

于 2010-12-04T21:31:21.683 回答
1

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

于 2010-12-04T21:27:03.367 回答
1

好的。谢谢你的答案我想通了...

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

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

约翰

于 2010-12-05T00:58:42.800 回答