【问题标题】:How to convert a CGFloat to an unsigned integer如何将 CGFloat 转换为无符号整数
【发布时间】:2010-12-04 21:22:38
【问题描述】:

我正在尝试使用 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。

我做错了什么。

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

约翰

【问题讨论】:

  • -2 你希望得到什么结果?

标签: iphone objective-c stringwithformat cgfloat


【解决方案1】:

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

0
4294967295 (-1)
4294967294 (-2)

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      好的。感谢您的答案,我想通了...

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

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

      约翰

      【讨论】:

      • 哎呀应该是 ...(abs)(int)myCGFloat;
      • 马克斯,谢谢。两年多前我问这个问题时,我可能不知道要编辑我的帖子。我今天的知识有点多,但不是很多。
      猜你喜欢
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多