美文网首页
iOS开发中NSUInteger带来的坑

iOS开发中NSUInteger带来的坑

作者: jinrui_w | 来源:发表于2018-11-15 10:54 被阅读0次

场景描述:

看下面代码的输出结果是什么?

    NSInteger index = 0;
    NSUInteger length = 0;
    if (index > length - 1) {
        NSLog(@"0大于-1");
    }else {
        NSLog(@"0不大于-1");
    }

输出结果是:0不大于-1

原因分析

首先,我们打印一下length - 1的值,NSLog(@"length - 1 = %ld", length - 1);,输出结果为length - 1 = -1,那么为什么结果是0不大于-1,而不是0大于-1呢?
我们换一种方式打印一下length - 1的值,NSLog(@"length - 1 = %lu", length - 1);输出结果为length - 1 = 18446744073709551615,到这里应该明白为什么会这样了,因为lengthNSUInteger类型,所以length - 1也是NSUInteger类型。(注:NSIntegerlong类型,NSUIntegerunsigned long类型)

解决办法

方法一:强制类型转换

    NSInteger index = 0;
    NSUInteger length = 0;
    if (index > (NSInteger)length - 1) {
        NSLog(@"0大于-1");
    }else {
        NSLog(@"0不大于-1");
    }

输出结果是:0大于-1

方法二:避免NSUInteger类型数做减法

    NSInteger index = 0;
    NSUInteger length = 0;
    if (index + 1 > length) {
        NSLog(@"0大于-1");
    }else {
        NSLog(@"0不大于-1");
    }

输出结果是:0大于-1

相关文章

  • iOS开发中NSUInteger带来的坑

    场景描述: 看下面代码的输出结果是什么? 输出结果是:0不大于-1 原因分析 首先,我们打印一下length - ...

  • iOS开发中遇到过的坑

    iOS开发中遇到过的坑 iOS开发中遇到过的坑

  • iOS开发 使用NSUInteger时遇到的坑

    踩坑场景 今天在使用NSUInteger的时候,遇到了一个坑,代码如下: 运行以上代码后,for循环会无限循环。 ...

  • iOS 中 MAX(A,B) 遇到 NSUInteger 的坑

    一次开发过程中竟遇到用 MAX函数比较 0 和 -1 时返回的是较小的值 -1简直逆天了。 使用场景大概如下: 结...

  • iOS进阶-谈谈定时器

    目录 iOS提供定时器API 定时器开发中的坑 一、 iOS提供定时器API 二、定时器开发中的坑 2.1、必须办...

  • H5学习之路

    持续更新中... 前言 从iOS开发入坑,途中掉入Android小坑,现在公司负责iOS及Android大坑,已经...

  • iOS端IM开发从入门到填坑

    iOS端IM开发从入门到填坑 iOS端IM开发从入门到填坑

  • iOS中CGFloat、NSInteger、NSUInteger

    CGFloat为double或float的typedef(别名) NSInteger为long或int的typed...

  • iOS开发笔记

    原文请见github上iOS开发笔记 iOS开发笔记 记录了在iOS开发中踩过的坑和一些问题解决 微信的openi...

  • iOS开发中的坑

    一、cell点击背景色覆盖按钮的背景色 cell默认选中行的颜色是灰色的,如果cell上有按钮等控件,cell的灰...

网友评论

      本文标题:iOS开发中NSUInteger带来的坑

      本文链接:https://www.haomeiwen.com/subject/rogefqtx.html