条件表达式使用注意

作者: _Thinking_ | 来源:发表于2016-03-19 12:00 被阅读117次

最近遇到一个使用了条件表达式引起的问题,记录一下。

UInt32 myRank = 1;  
BOOL hasMyRank = NO;  
NSInteger myRank = hasMyRank ? myRank : -1;  

这段代码在armv7s的架构下运行结果是 -1 ,
在arm64下运行结果却是 UInt32 的最大值。
原因是条件表达式是根据第一个值的类型作为返回值的。

因此,上面的表达式,可以理解为以下函数:

UInt32 getMyRank() {  
    if (hasMyRank) {  
        return myRank;  
    }  
    return -1;  
}  

注意一下函数的返回类型

结论:

  • 在armv7s下, NSInteger 是32位有符号整型,(UInt32)-1 转成 int32 时刚好也是 -1;
  • 在arm64 下, NSInteger 是64位有符号整数,可以容得下 (UInt32)-1的值,实际上就是UInt32的最大值,所以会显示一个很大的数值。

最后

为了避免不必要的错误,还是尽量保证条件表达式的参数类型一致。

相关文章

  • 从零开始学习Linux(四十七):Shell编程之流程控制if语

    1、单分支if条件语句 1.1、格式一 1.2、格式二 注意: if语句使用fi结尾; [ 条件表达式 ] 就是前...

  • 条件表达式使用注意

    最近遇到一个使用了条件表达式引起的问题,记录一下。 这段代码在armv7s的架构下运行结果是 -1 ,在arm64...

  • switch

    注意点 switch的条件表达式注意点switch的条件表达式必须是返回整数的表达式,也就是说()中只能放整数或者...

  • 2020-08-25shell流程控制结构

    条件表达式 概念:在各种条件结构和流程控制结构进行的各种判断,然后根据不同条件执行不同的操作 [条件表达式]注意:...

  • mybatis中if test字符串比较

    mybatis中条件表达式字符串用''单引号不能直接比较,需要加toString() 使用如下两种方式 或者 注意...

  • ios的代码小tips

    三元条件表达式的两元使用 1> 使用格式 表达式A ? 表达式B : 表达式C 2> 运算结果 如果表达式A成立,...

  • android sqlite数据库 修改数据

    修改数据也需要懂得使用where多条件语句 条件表达式 =,!=,>,<,>=,<= 多条件 and or , a...

  • python初学者,条件控制语句

    1.条件判断语句if ==语法:== 注意:条件表达式后面的 “:”不可缺少。在写“语句块”的时候,务必注意代码缩...

  • 4.C语言-循环控制结构程序

    1.for语句 注意: for循环中的“表达式1(循环变量赋初值)”、“表达式2(循环条件)”和“表达式3(循环变...

  • SQL select语句基本构成

    where条件查询 where条件是表达式,在哪一行上表达式为真,就将哪一行取出来需要注意的条件关键字 <> 大于...

网友评论

    本文标题:条件表达式使用注意

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