2013-08-07 2 views
0

J'ai deux UInt16 valeursConvertir deux valeurs UInt16 une UInt32 valeur considérer mot moins et le plus important

private UInt16 leastSignificantWord; 
private UInt16 mostSignificantWord; 

Les deux mots (valeurs UInt16) proviennent d'un composant qui divise un état UInt32/valeur d'erreur en deux mots et renvoie les deux mots. Maintenant, j'ai besoin de revenir à la valeur UInt32. Pour résumer les deux mots ensemble ne ferait pas l'affaire en raison de l'indifférence si le plus et le moins significatif.

Par exemple:

private UInt16 leastSignificantWord = 1; 
private UInt16 mostSignificantWord = 1; 

//result contains the value 2 after sum both words 
//which can not be correct because we have to take note of the most and least significant 
UInt32 result = leastSignificantWord + mostSignificantWord; 

est-il un moyen de résoudre ce problème? Pour être honnête, je n'ai jamais travaillé avec des bits/octets en C# donc je n'avais jamais rencontré un tel problème. Merci à l'avance

Répondre

3
private UInt16 leastSignificantWord = 1; 
private UInt16 mostSignificantWord = 1; 

UInt32 result = (leastSignificantWord << 16) + mostSignificantWord; 

Vous avez 2 UInt16 (16 bits et 16 bits) un 0010 1011 1010 1110 et deuxième 1001 0111 0100 0110

Si vous lisez ce 2 UIn16 comme l'un UInt32 vous aurez 0010 1011 1010 1110 1001 0111 0100 0110

Alors , (leastSignificantWord << 16) vous donne 0010 1011 1010 1110 0000 0000 0000 0000 et cela plus vous donne 0010 1011 1010 1110 1001 0111 0100 0110

Ceux-ci peuvent être utiles

http://msdn.microsoft.com/en-us/library/a1sway8w.aspx

What are bitwise shift (bit-shift) operators and how do they work?

Questions connexes