如何将UInt8分为3位和5位

时间:2016-12-28 07:51:12

标签: ios swift bit

我想知道如何输入分为3位和5位的UInt8。

Var val: UInt8 = 0

Val.bit3 = 0x06 // 110 
Val.bit5 = 0x11 // 10000

我想要结果: 11010000或10000110(3bit / 5bit或5bit / 3bit)

extension UInt8 {
    var bit3 : UInt8 {
        get {
            ??
        }
        set(newValue) {
            ??
        }
    }

    var bit5 : UInt8 {
        get {
            ??
        }
        set(newValue) {
            ??
        }
    }
}

如何进行按位操作以获得上述结果?

...谢谢

1 个答案:

答案 0 :(得分:2)

你可以做那样的事情

extension UInt8 {
    var bit3 : UInt8 {
        get {
            return (self & 0b1110_0000) >> 5
        }
        set(newValue) {
            self &= 0b0001_1111
            self |= ((newValue << 5) & 0b1110_0000)
        }
    }

    var bit5 : UInt8 {
        get {
            return self & 0b0001_1111
        }
        set(newValue) {
            self &= 0b1110_0000
            self |= (newValue & 0b0001_1111)
        }
    }
}

bit3此处为“top”,bit5为“bottom”。

编辑:在设置

之前忘记清理位