【问题标题】:How can I round a signed integer up to zero?如何将有符号整数四舍五入为零?
【发布时间】:2013-12-20 00:02:31
【问题描述】:

我到处都在这样做

NSInteger myint = -3;

// ...

NSUInteger myuint = myint >= 0 ? myint : 0;

Objective C 中是否有一个数学函数可以在不使用三元/条件赋值的情况下做同样的事情?像这样的:

NSUInteger myuint = rounduptozero( myint );

【问题讨论】:

    标签: objective-c math integer


    【解决方案1】:

    任意使用:

    NSUInteger myuint = MAX(myint, 0);
    

    或者定义你自己的rounduptozero函数:

    NSUInteger rounduptozero(NSInteger val) {
        return MAX(val, 0);
    }
    
    NSUInteger myuint = rounduptozero(mint);
    

    【讨论】:

    • 为什么不能使用表达式作为参数之一,例如MAX(myint1 - myint2, 0)?它只是给了我一个NSNotFound
    • 你可以这样做。你为什么不认为你可以?
    • 当我尝试这样做时,它给了我一个NSNotFound 值。但是当我首先将相同的表达式声明为变量时,它可以正常工作。
    • 根据值,减去有符号和无符号值是很危险的。结果将被视为无符号,因此如果明显的结果为负,您最终会得到一个巨大的无符号值。
    • 使用演员表。但是你需要非常小心。
    【解决方案2】:

    MAX 是在objective-c 运行时中定义的(更具体地说,它在NSObjCRuntime 中,它包含在Foundation 框架中),因此您可以安全地使用MAX(value, 0)。

    如果你到处使用它,为了清楚起见,我建议将该宏包装在你自己的(或函数中)中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      相关资源
      最近更新 更多