条件表达式注意的问题
2015-05-28 21:24
295 查看
最近遇到一个 条件表达式引起的问题,记录一下。
这段代码在armv7s的架构下运行结果是 -1 ,但在arm64下运行结果却是 UInt32 的最大值。
原因是 条件表达式 是根据第一个值的类型作为返回值的。
当在armv7s下, NSInteger 是32位有符号整型,(UInt32)-1 转成 int32 时刚好也是 -1;
但在arm64 下, NSInteger 是64位有符号整数,可以容得下 (Uint32)-1的值,所以会显示一个很大的数值。
因此,还是尽量保证条件表达式的参数类型一致。
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的值,所以会显示一个很大的数值。
因此,还是尽量保证条件表达式的参数类型一致。
相关文章推荐
- apache 访问控制
- 深入了解JVM垃圾收集器
- HDU 1358 Period (KMP)
- 代码记录
- 深入了解JVM垃圾收集器
- C编译: 动态连接库 (.so文件)
- 站立会议 第九天
- Spring 配置数据源 利用JdbcTemplate工具类实现增删改查
- VS2012下MFC程序的换肤(Skin++、SkinMagic、USkin、SkinSharp)
- 题目1523:从上往下打印二叉树
- PostgreSQL学习手册(模式Schema)
- 【编程者必会系列】:TCP/IP之传输层
- OAF 动态创建组件以及动态绑定属性
- epoll和select区别
- 大数阶乘
- JBoss 关闭不了
- Java Servlet学习笔记(三)Servlet表单数据
- 毕业设计,做的安卓客户端(web客户端)+web服务器
- 站立会议 第十天
- Jenkins搭建的几个坑记下