2013-08-07 5 views
0

У меня есть два UInt16 значенияПреобразование двух значений uint16 одному из UInt32 стоимости считает наименее и наиболее значащим словом

private UInt16 leastSignificantWord; 
private UInt16 mostSignificantWord; 

Два слова (значения UInt16) происходят из компонента, который делит состояние/значение ошибки UInt32 в два слова и возвращает два слова. Теперь мне нужно вернуться к значению UInt32. Суммировать эти два слова вместе не могли бы сделать трюк из-за пренебрежения самым большим и наименее значимым.

Например:

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; 

Есть ли способ решить эту проблему? Честно говоря, я никогда не работал с битами/байтами в C#, поэтому я никогда не сталкивался с такой проблемой. Заранее спасибо

ответ

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

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

У вас есть 2 UInt16 (16 бит и 16 бит) один 0010 1011 1010 1110 и второй 1001 0111 0100 0110

Если вы будете читать этот 2 UIn16 как один UInt32 вы будете иметь 0010 1011 1010 1110 1001 0111 0100 0110

So , (leastSignificantWord << 16) дает вам 0010 1011 1010 1110 0000 0000 0000 0000, и этот плюс mostSignificantWord дает вам 0010 1011 1010 1110 1001 0111 0100 0110

Это может быть полезно

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

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