Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# 使用Int64进行位移位_C#_.net_Bit Shift_Int64 - Fatal编程技术网

C# 使用Int64进行位移位

C# 使用Int64进行位移位,c#,.net,bit-shift,int64,C#,.net,Bit Shift,Int64,Int64变量需要移位。我正在从数据库文件解析伪数学函数。变量是uint32或int32,所以我将它们放入Int64中,以便在不丢失任何内容的情况下对它们进行同等处理。在我的一个树节点中,我需要对Int64进行位移位 不幸的是,移位运算符不适用于Int64。是否有一种我不知道的位移位Int64的标准方法 //Int32 Example works int a32 = 1; int b32 = 2; int c32 = a32 >> b32; //Int64 Example does

Int64变量需要移位。我正在从数据库文件解析伪数学函数。变量是uint32或int32,所以我将它们放入Int64中,以便在不丢失任何内容的情况下对它们进行同等处理。在我的一个树节点中,我需要对Int64进行位移位

不幸的是,移位运算符不适用于Int64。是否有一种我不知道的位移位Int64的标准方法

//Int32 Example works
int a32 = 1;
int b32 = 2;
int c32 = a32 >> b32;

//Int64 Example does not compile
Int64 a64 = 1;
Int64 b64 = 2;
Int64 c64 = a64 >> b64; //invalid operator

我相信右移位运算符(在C#中)的右操作数总是取
int
,即使左操作数不是
int


此处的官方详细信息。

要移位的位数必须是
int

例如:


您能将b64存储为
int
?它会有区别吗?你能使用UInt64(无符号整数)吗?右手操作数是移位左手操作数的位数。所以用Int64进行移位毫无意义…@codesparkle我同意,但类似的数字可能来自数据库。我现在通过转换为int32解决了这个问题。其他的都没有意义,因为移动超过64个位置只会让所有东西都消失。@Dervall但按照这些思路,即使是
int
也有点过分:)@reuben一个字节就可以了,但这会导致代码变慢,因为处理器优化为使用32位,或64位。好的-它与整数一起工作。。。但实际上,我的用户可以将UINT32.MAX作为一个值来编写,而我的代码会做一些愚蠢的事情。。。我承认这不太可能。。我会在代码中留下一个待办事项,让未来的程序员发疯。
int shift = 3;
long foo = 123456789012345;
long bar = foo >> shift;