Gogo123
使用此代码:
let rand : Int = Int(arc4random())
NSLog("rand = %d %i %@ \(rand)",rand,rand,String(rand))
我得到:
rand = -1954814774 -1954814774 2340152522 2340152522
为什么所有4个值都不相同?
清扫器
arc4random
生成一个无符号的32位int。Int
在您的计算机上可能是64位,所以您得到相同的数字,并且不会溢出。但是%i
和%d
是带符号的32位格式说明符。看到这里和这里。这就是为什么当arc4random
返回大于2 ^ 32-1 aka的数字时会得到负数的原因Int32.max
。
例如,当生成2340152522时,您之所以会-1954814774
进入该%i
位置是因为:
Int32(bitPattern: 2340152522) == -1954814774
另一方面,将转换Int
为String
不会更改数字。Int
是一个有符号的64位整数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
编辑于
我来说两句