Swift 在这个例子中,0xFFFFFF在做什么?

Swift 在这个例子中,0xFFFFFF在做什么?,swift,swift2,Swift,Swift2,我知道arc4random返回一个不超过(2^32)-1的无符号整数。在这种情况下,它总是给出一个介于0和1之间的数字 var x:UInt32 = (arc4random() / 0xFFFFFFFF) 被0xFFFFFF除法如何使数字介于0到1之间?如您所述 arc4random返回一个不超过(2^32)-1的无符号整数 0xFFFFFF等于(2^32)-1,这是arc4random()的最大可能值。因此,算术表达式(arc4random()/0xFFFFFFFF)给出的比率始终在0和1之

我知道arc4random返回一个不超过(2^32)-1的无符号整数。在这种情况下,它总是给出一个介于0和1之间的数字

var x:UInt32 = (arc4random() / 0xFFFFFFFF)
被0xFFFFFF除法如何使数字介于0到1之间?

如您所述

arc4random返回一个不超过(2^32)-1的无符号整数


0xFFFFFF等于(2^32)-1,这是
arc4random()
的最大可能值。因此,算术表达式
(arc4random()/0xFFFFFFFF)
给出的比率始终在0和1之间-由于这是一个整数除法,结果只能在0和1之间。

要接收0和1之间的值,结果必须是浮点值

var x:UInt32 = (arc4random() / 0xFFFFFFFF)
import Foundation
(1..<10).forEach { _ in
    let x: Double = (Double(arc4random()) / 0xFFFFFFFF)
    print(x)
}
/*
 0.909680047749933
 0.539794033984606
 0.049406117305487
 0.644912529188421
 0.00758233550181201
 0.0036165844657497
 0.504160538898818
 0.879743074271768
 0.980051155663107
 */
<代码>导入基础
(1..你的问题是什么?@TechBee:他们的问题是他们不明白这是如何工作的。说得好@BoltClock我认为这只是一种说“用0初始化x,但千载难逢地将其设为1的方式,这样几年后,一些可怜的开发人员就会揪头发寻找一个讨厌的bug”它不太可能产生一个1,你可以用
var x=0
替换它,这是一个整数除法,结果只能是0或(很少)1。正如Martin R所说,结果几乎都是0,概率为1:0xffffffff。顺便问一下,我们是不是在谈论arc4random()?您的意思是结果必须在0-1之间,而不是0或1?后者与您第一次陈述的结果是一个比率相冲突。@Hidden14:“介于0和1之间”,包括在内。我应该更清楚一点。