随着iPhone 5S的更新,我希望我的应用程序能够支持新的64位处理器。
然而,使用64位可能会导致截断问题,如果将较大类型的数据强制转换为较小类型,例如将长整型转换为整型。大多数情况下,这可以通过使用更大的数据类型来轻松解决,但在随机数生成器使用“time(NULL)”函数生成种子的情况下,我不能这样做。
当前代码很简单:
但在使用64位的XCode 5中,会导致以下错误:
注意:我使用random()代替arc4random(),因为我还需要能够对随机数生成器进行种子处理,以获得可重复的结果。
然而,使用64位可能会导致截断问题,如果将较大类型的数据强制转换为较小类型,例如将长整型转换为整型。大多数情况下,这可以通过使用更大的数据类型来轻松解决,但在随机数生成器使用“time(NULL)”函数生成种子的情况下,我不能这样做。
当前代码很简单:
srandom(time(NULL));
但在使用64位的XCode 5中,会导致以下错误:
Implicit conversion loses integer precision: 'time_t' (aka 'long') to 'unsigned int'
。这是因为"time(NULL)"返回了一个长整型,而"srandom"需要一个无符号整型。因此有两个选择:
- 将长整型转换为无符号整型
- 用另一个函数替换"time(NULL)",该函数完成同样的工作,但返回一个无符号整型。
注意:我使用random()代替arc4random(),因为我还需要能够对随机数生成器进行种子处理,以获得可重复的结果。