Какое значение 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
 */