如何使用NSNumber进行乘法和加法

时间:2014-05-29 06:57:17

标签: objective-c nsnumber

我想用NSNumber实现简单的计算。

例如:

int a;
a=a*10;
a=a+1;
NSLog(@"%d",a);

如果我声明

,如何做同样的事情
NSNumber *a;

我想用NSNumber实现相同的逻辑,我使用整数实现。 感谢

3 个答案:

答案 0 :(得分:5)

没有明确支持在NSNumber上进行数学运算。 NSNumber用于包装基本类型编号。 (例如,将其用于存储在数组/ dicitionaries中)

如果您有一个NSNumber实例并且想要进行数学运算,则应将其值提取为基本类型:

int num = [numberInstance intValue]; 
num += 1; // Just for the example;

完成后,创建一个用于存储新值的新实例(因为NSNumber是不可变的,所以不能使用旧的NSNumber实例)

numberInstance = [NSNumber numberWithInt:num];

答案 1 :(得分:4)

NSNumber对象中的乘法和加法过程非常困难

将其转换为int值以执行进程而不是返回NSNumber对象。

这里是您需要的代码

NSNumber *a;
int b = [a intValue];
b = b * 10;
b = b + 1;
a = [NSNumber numberWithInt:b];

答案 2 :(得分:0)

NSNumber是任何常规整数类型的包装类。为了进行算术运算,你必须获得你想要算术的原始数据类型,然后进行算术运算,然后在NSNumber中重新包装它。

将数字乘以5并添加4的示例如下:

NSNumber *num = // get this somewhere
num = @(num.intValue * 5 + 4);

理论上,可以使用-addInt等方法创建子类,但我个人使用如下的宏:

#define NSNumberAddInt(num, i) num = @( num.intValue + i )
#define NSNumberMultiplyInt(num, i) num = @( num.intValue * i )
#define NSNumberMultiplyAddInt(num, i, j) num = @(num.intValue * i + j)

实际上我有一些更复杂的宏实际上声明了内联函数:

#define NSNumberDeclareAddType(type, utype) \\
  inline NSNumber *NSNumberAdd ## utype ( NSNumber *inNum, type i ) {
    return @( inNum. type ## Value + i );
  }
#define NSNumberDeclareMultiplyType(type, utype) \\
  inline NSNumber *NSNumberMultiply ## utype ( NSNumber *inNum, type i ) {
    return @( inNum. type ## Value * i );
  }
#define NSNumberDeclareMultiplyAddType(type, utype) \\
  inline NSNumber *NSNumberMultiplyAdd ## utype ( NSNumber *inNum, type i, type j ) {
    return @( inNum. type ## Value * i + j );
  }
#define NSNumberDecalreArithmeticType(type, utype) NSNumberDeclareAddType(type, utype) \\
  NSNumberDeclareMultiplyType(type, utype) \\
  NSNumberDeclareMultiplyAddType(type, utype)

然后添加

等行
NSNumberDecalreArithmeticType(int, Int)
NSNumberDecalreArithmeticType(float, Float)
NSNumberDecalreArithmeticType(double, Double)

当然,从理论上讲,这可以通过c ++模板进行简化,但我不是c ++大师(然后我再也不是大师)所以我不想发布任何c ++代码。