Какое значение 0xFFFFFFFF делаешь в этом примере?
Я понимаю, что arc4random возвращает целое число без знака до (2^32)-1. В этом случае он всегда дает число между 0 и 1.
var x:UInt32 = (arc4random() / 0xFFFFFFFF)
как деление на 0xFFFFFFFF приводит к тому, что число находится между 0-1?
2 ответов
Как вы сказали,
arc4random возвращает целое число без знака до (2^32) -1
0xFFFFFFFF в равна (2^32)-1, который является наибольшее возможное значение arc4random()
. Итак, арифметическое выражение (arc4random() / 0xFFFFFFFF)
дает вам отношение, которое всегда находится между 0 и 1 - и поскольку это целочисленное деление, результат может быть только между 0 и 1.
чтобы получить значение от 0 до 1, результат должен быть значением с плавающей запятой
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
*/