【问题标题】:How to compare two NSInteger?如何比较两个 NSInteger?
【发布时间】:2012-02-28 05:13:11
【问题描述】:

我们如何比较两个 NSInteger 数字?我有两个 NSInteger,用常规方式比较它们是行不通的。

if (NSIntegerNumber1 >= NSIntegerNumber2) {
    //do something
}

尽管第一个值为 13,第二个值为 17,但 if 循环正在执行

有什么想法吗?

【问题讨论】:

  • 您就是这样做的。仔细检查它们的值:在 if 之前设置一个断点并确保它们是您所期望的。
  • NSInteger 是 int 的别名。所以它应该工作。否则指定 NSIntegerNumber1 变量的类型..
  • 你确定这些是 NSInteger 数字吗?我的猜测是这些是 NSNumbers,您正在尝试比较指针。
  • 确保在调试时使用的是 p 而不是 po,这就是解决我的问题的原因
  • 为什么 p 不理解类型而 p 不理解?如果 po 不知道类型,为什么它会打印一个看似有效的值?不管是什么原因,这帮助我找到了我的根本问题。

标签: objective-c ios nsinteger


【解决方案1】:

NSInteger 只是内置整数类型的 typedef(例如 intlong)。

使用a == b进行比较是安全的。

其他常见运算符的行为可预测:!=<=<>= 等。

最后,NSInteger 的底层类型因平台/架构而异。假设它始终是 32 位或 64 位是不安全的。

【讨论】:

  • 这应该被投赞成票,因为它解释了推理
【解决方案2】:

好吧,既然名称中有 Integer 和 Number,您可能已将这两个值声明为 NSNumber 而不是 NSInteger。如果是这样,那么您需要执行以下操作:

 if ([NSIntegerNumber1 intValue] >= [NSIntegerNumber2 intValue]) {
      // do something
 }

否则它应该按原样工作!

【讨论】:

    【解决方案3】:
    NSInteger int1;
    NSInteger int2;
    
    int1 = 13;
    int2 = 17;
    
    if (int1 > int2)
    {
        NSLog(@"works");
    }
    

    【讨论】:

      【解决方案4】:

      当比较整数时,使用这个就可以了:

      int a = 5;
      int b = 7;
      
      if (a < b) {
      
      NSLog(@"%d is smaller than %d" a, b);   
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-16
        • 2016-02-02
        • 2021-09-21
        • 2012-01-25
        • 2020-03-19
        • 2014-10-29
        相关资源
        最近更新 更多