2016-12-28 13 views
0

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

Var val: UInt8 = 0 

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

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

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

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

我怎么位运算来获得上述结果呢?

...谢谢你

+0

之前清理位,这个http://stackoverflow.com/a/28010707/1187415应该很容易适应您的需求。 –

+1

另外,Swift不是Visual Basic或其他东西:'var'!='Var'和'Val'!='val'。和'0x11' ='0b10001'。 – user28434

+1

我强烈建议您为这些房产制作更好的名字:p – Alexander

回答

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这里是 “顶” 和bit5是 “底”。

编辑:忘了设置

+0

非常感谢。 – chacker

+0

使用你的代码,当'set'时,结果按原始值进行按位或运算。我想替换原来的价值将是所需的行为。 – OOPer

+1

@OOPer,是的,修复它。 – user28434