2016-12-28 1 views
0

Je me demande comment entrer UInt8 divisé en 3bit et 5bit.Comment diviser UInt8 en 3 bits et 5 bits

Var val: UInt8 = 0 

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

je veux résultat: 11010000 ou 10000110 (3bit/5bit ou 5bit/3bit)

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

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

Comment puis-je faire des opérations au niveau du bit pour obtenir le résultat ci-dessus?

... Merci

+0

Ce http://stackoverflow.com/a/28010707/1187415 devrait être facilement adaptable à vos besoins. –

+1

En outre, Swift n'est pas Visual Basic ou quelque chose: 'var'! =' Var' et 'Val'! =' Val'. Et '0x11' =' 0b10001'. – user28434

+1

Je vous invite à faire de meilleurs noms pour ces propriétés: p – Alexander

Répondre

2

Vous pouvez faire quelque chose comme ça

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 ici est "top" et bit5 est "bas".

EDIT: Vous avez oublié de nettoyer les bits avant de

+0

Merci beaucoup. – chacker

+0

Avec votre code, quand 'set', le résultat est en OU bit à bit à la valeur d'origine. Je suppose que le remplacement de la valeur d'origine serait le comportement souhaité. – OOPer

+1

@OOPer, ouais, réparé. – user28434