2009-07-10 6 views
16

J'ai un champ int bitmasked dans ma base de données. En général, je parviens à travers le code C#, mais maintenant je dois retourner un peu dans le masque en utilisant T-SQLOpérations de basculement de bits dans T-SQL

Comment puis-je effectuer les opérations suivantes:

Le bit Je veux retourner: 1 < < 8 (256)

La valeur du masque avant FLIP: 143

La valeur du masque après avoir FLIP: 399

Cela peut être fait sans les opérateurs de bits qui manquent dans T-SQL, non?

Répondre

25

Utilisez XOR:

SELECT value^256 

Donc, dans votre cas, SELECT 143^256 va en effet revenir 399. Si vous voulez passer dans l'exposant ainsi:

SELECT value^POWER(2, power) 
+0

merci! Cela a résolu mon problème! Y a-t-il aussi un moyen d'activer le bit d'une manière élégante? (Je l'ai déjà fait, mais il a l'air moche ...) –

+2

Vous cherchez à retourner ou allumer? Flip - utilisez XOR (^); allumer - utilisez OU (|). Si vous voulez plus d'élégance, enveloppez-vous dans une fonction définie par l'utilisateur et nommée de manière laconique. :) –

20

opérateurs Tsql se trouvent au niveau du bit here et bon article sur la façon de les utiliser est here

+1

La question est sur le décalage de bits, les articles que vous avez posté n'ont rien à voir avec cela – Edwin

+3

La question est sur bit-FLIPPING, pas sur le décalage de bits. –

+0

Le titre est erroné sur le décalage de bits, mais la question réelle sur le retournement de bit. – DaveBoltman

Questions connexes