Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将两个数字组合成一个Int32_C#_Bit Manipulation - Fatal编程技术网

C# 将两个数字组合成一个Int32

C# 将两个数字组合成一个Int32,c#,bit-manipulation,C#,Bit Manipulation,我正在将数据发送到一个连接的设备,并且出现了一个问题,即从该设备重新运行的一个整数包含两个id。一个压缩在10个LSB位中,第二个压缩在22个MSB位中。从这个网站的帮助中,我发现了如何解析这两个数字(我相信这是正确的): 现在我需要从两个数字(分别为10位和22位)创建一个int32,并再次需要一些方向。涉及哪些步骤 谢谢 看来你有 companyID nodeID <- 22 -> <-10-> 请注意,对于companyID,您应该首先将其向右

我正在将数据发送到一个连接的设备,并且出现了一个问题,即从该设备重新运行的一个整数包含两个id。一个压缩在10个LSB位中,第二个压缩在22个MSB位中。从这个网站的帮助中,我发现了如何解析这两个数字(我相信这是正确的):

现在我需要从两个数字(分别为10位和22位)创建一个int32,并再次需要一些方向。涉及哪些步骤

谢谢

看来你有

   companyID  nodeID 
   <- 22  ->  <-10->
请注意,对于
companyID
,您应该首先将其向右移动,以去除最左边的
10
nodeID
)位:

首字母:

   companyID  nodeID 
   <- 22  ->  <-10->
   var encoded = (CompanyID << 10) | nodeID
掩蔽后(
&0x3FFFFF
):

00..00 companyID==companyID
反向:

   companyID  nodeID 
   <- 22  ->  <-10->
   var encoded = (CompanyID << 10) | nodeID
var encoded=(CompanyID看来您已经

   companyID  nodeID 
   <- 22  ->  <-10->
请注意,对于
companyID
,您应该首先将其向右移动,以去除最左边的
10
nodeID
)位:

首字母:

   companyID  nodeID 
   <- 22  ->  <-10->
   var encoded = (CompanyID << 10) | nodeID
掩蔽后(
&0x3FFFFF
):

00..00 companyID==companyID
反向:

   companyID  nodeID 
   <- 22  ->  <-10->
   var encoded = (CompanyID << 10) | nodeID

var encoded=(CompanyID我想这就是答案

Value = LSB + (MSB << 10);

Value=LSB+(MSB我想这就是答案

Value = LSB + (MSB << 10);

Value=LSB+(MSB似乎不应该比以下内容更复杂:

//便利过载
公共静态整数包(整数x,整数y)
{
返回(整数)包((整数)x,(整数)y);
}
//便利超载
公共静态无效解包(int p,out int x,out int y)
{
uint-x1,y1;
拆包((uint)p,x1,y1);
x=(int)x1;
y=(int)y1;
}
//包装操作的本质
公共静态单元组(单元x、单元y)
{
如果((x&0xffc0000u)!=0)抛出新的ArgumentOutOfRangeException(“参数超出范围”,“x”);
如果((y&0xFFFFFC00)!=0)抛出新的ArgumentOutOfRangeException(“参数超出范围”,“y”);
uint z=(x>10;
y=(p&0x000003FFu);
}

似乎它不应该比以下内容更复杂:

//便利过载
公共静态整数包(整数x,整数y)
{
返回(整数)包((整数)x,(整数)y);
}
//便利超载
公共静态无效解包(int p,out int x,out int y)
{
uint-x1,y1;
拆包((uint)p,x1,y1);
x=(int)x1;
y=(int)y1;
}
//包装操作的本质
公共静态单元组(单元x、单元y)
{
如果((x&0xffc0000u)!=0)抛出新的ArgumentOutOfRangeException(“参数超出范围”,“x”);
如果((y&0xFFFFFC00)!=0)抛出新的ArgumentOutOfRangeException(“参数超出范围”,“y”);
uint z=(x>10;
y=(p&0x000003FFu);
}

//MSB(最高有效位);从左到右
//LSB(最低有效位);从右到左
//10位
var结果=源1和0x3FF;
//10 MSBits
变量结果=(source1>>22)&0x3FF;
//22位
var result=source2&0x3FFFFF;
//22 MSBits
变量结果=(source2>>10)&0x3FFFFF;
//10个LSBits包,带22个MSBits
var结果=((source1和0x3FF)>10)和0x3FFFFF);
//带22个LSBits的10 Mbits包(第一个变体)
var结果=(源1和0xFFC00000)|(源2和0x3FFFFF);
//带22个LSBits的10 Mbits包(第二个变体)
var结果=((source1>>22)和0x3FF)>22)和0x3FF)>10)和0x3FFFFF);
//22位数据包,带10毫位字节
var结果=((source2和0x3FFFFF)>22)和0x3FF);
//22兆位及其包含10个LSBits的包(第1个变体)
变量结果=(源2和0xFFFFFC00)|(源1和0x3FF);
//22 MSBits包,带10个LSBits(第二个变体)
var结果=((source2>>10)和0x3FFFFF)>10)和0x3fff)>22)和0x3FF);
选择你喜欢的一个。。。

//MSB(最高有效位);从左到右
//LSB(最低有效位);从右到左
//10位
var结果=源1和0x3FF;
//10 MSBits
变量结果=(source1>>22)&0x3FF;
//22位
var result=source2&0x3FFFFF;
//22 MSBits
变量结果=(source2>>10)&0x3FFFFF;
//10个LSBits包,带22个MSBits
var结果=((source1和0x3FF)>10)和0x3FFFFF);
//带22个LSBits的10 Mbits包(第一个变体)
var结果=(源1和0xFFC00000)|(源2和0x3FFFFF);
//带22个LSBits的10 Mbits包(第二个变体)
var结果=((source1>>22)和0x3FF)>22)和0x3FF)>10)和0x3FFFFF);
//22位数据包,带10毫位字节
var结果=((source2和0x3FFFFF)>22)和0x3FF);
//22兆位及其包含10个LSBits的包(第1个变体)
变量结果=(源2和0xFFFFFC00)|(源1和0x3FF);
//22 MSBits包,带10个LSBits(第二个变体)
var结果=((source2>>10)和0x3FFFFF)>10)和0x3fff)>22)和0x3FF);
选择你喜欢的一个。。。

(source>>10)&0x3FFFFF
:第一次右移然后是maskYou实际上不需要第二个掩码<代码>>>10
是获取无符号32位值的前22位所需的全部。(>>是换档操作而不是旋转操作)。如果使用的是位而不是数字,也可以使用无符号整数。@Ian Mercer:唉,可能需要掩码:
>
传播符号位:
-1>>3=-1
:请注意,
-1==0b111…1111
(所有的一个)不会更改,因为最左边的
1
重复了3次times@DmitryBychenko对对于有符号的值,但对于无符号的值(这是ops存储类型的更好选择)>>不传播符号位。
(source>>10)&0x3FFFFF
:第一次向右移位,然后maskYou实际上不需要第二个掩码<代码>>>10
是获取无符号32位值的前22位所需的全部。(>>是换档操作而不是旋转操作)。如果使用的是位而不是数字,也可以使用无符号整数。@Ian Mercer:唉,可能需要掩码:
>
传播符号位:
-1>>3==