member this.Lsl(idx) = if (idx > 31) || (idx < 0) then 0 else this <<< idx
member this.Lsr(idx) = if (idx > 31) || (idx < 0) then 0 else int32 ((uint32 this) >>> idx)
member this.Asr(idx) = if (idx > 31) || (idx < 0) then 0 else this >>> idx
member this.Ror(idx) = (this.Lsr(idx &&& 31)) ||| (this.Lsl(32 - (idx &&& 31)))
member this.Numbits() = 32
member this.Signbit() = 1 <<< (this.Numbits() - 1)
member this.Item with get idx = (this.Lsr(idx)) &&& 1
member this.GetSlice(start, finish) =
let start = defaultArg start 0
let finish = defaultArg finish 31
let mask = ~~~ (0xffffffff.Lsl(finish + 1))
(this &&& mask).Lsr(start)
member this.SetSlice(start, finish, value:int) =
let start = defaultArg start 0
let finish = defaultArg finish 31
let mask = ((1 <<< (finish + 1 - start)) - 1) <<< start
(this &&& ~~~ mask) ||| value.Lsl(start)
let b = a.[8..15] <- 0x67