0

我有两个 UInt16 值

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# 中使用过位/字节,所以我从来没有遇到过这样的问题。提前致谢

4

1 回答 1

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

所以,(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

什么是按位移位(bit-shift)运算符,它们是如何工作的?

于 2013-08-07T13:22:39.687 回答