2016-12-28 5 views
0

UInt8을 3 비트와 5 비트로 나누어 입력하는 방법을 궁금합니다. 11010000 또는 10000110 (3 비트/5 비트 또는 5 비트/3 비트)UInt8을 3 비트와 5 비트로 나누는 방법

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

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

가 어떻게 비트 연산 위의 결과를 얻을 수합니까 :

Var val: UInt8 = 0 

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

난 결과 싶어?

는 ... 여기에 "최고"이고 bit5는 "바닥"당신이

+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처럼 뭔가를 할 수 있습니다 감사합니다.

편집 :

+0

대단히 감사합니다. – chacker

+0

코드에서'set'을하면 결과는 원래의 값과 비트 단위 OR 연산됩니다. 원래 값을 바꾼다는 것이 바람직한 동작이라고 생각합니다. – OOPer

+1

@OOPer, 예, 해결했습니다. – user28434