C# 使用Int64进行位移位
Int64变量需要移位。我正在从数据库文件解析伪数学函数。变量是uint32或int32,所以我将它们放入Int64中,以便在不丢失任何内容的情况下对它们进行同等处理。在我的一个树节点中,我需要对Int64进行位移位 不幸的是,移位运算符不适用于Int64。是否有一种我不知道的位移位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
//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;