The direct translation into F# looks like this:
let bitreverse x = 
    let mutable x = x
    let mutable b = 0
    while x <> 0 do 
        b <- b <<< 1
        b <- b ||| (x &&& 1)
        x <- x >>> 1
    b
This is highly imperative with mutable values and this isn't usually how we'd tend to go about writing code in F#.  Notice that re-assignment of a mutable variable is a little different to what you might be used to in an imperative language, you have to use <- which is called the destructive update operator.
Thankfully, it's pretty straightforward to translate this into a recursive function that uses immutable values which should be a little more idiomatic
let bitreverse2 x =
    let rec bitRerverseHelper b x =
        match x with
        |0 -> b // if 0, the recursion stops here and we return the result: b
        |_ -> bitRerverseHelper ((b <<< 1) ||| (x &&& 1)) (x >>> 1) // otherwise recurse
    bitRerverseHelper 0 x