按位运算评估为long

时间:2012-10-27 03:24:27

标签: c# casting bit-manipulation bitwise-operators logical-operators

我一直在将一些Java代码转换为C#并遇到了一些麻烦。 MSDN上的所有文档都表明所有按位操作都返回正在操作的类型。请参阅:http://msdn.microsoft.com/en-us/library/aa691307(v=vs.71).aspxhttp://msdn.microsoft.com/en-us/library/aa691377(v=vs.71).aspx但是我做了什么,我的intellisense一直告诉我你“不能隐式地将类型'long'转换为'int'。”以下行是有问题的那一行,对我来说,那里的所有文字看起来都像是评估为int,所有操作类型都是int或uint。我错过了什么?我甚至没有在我的文件中声明任何长变量,下面的所有变量都是int类型。转换为uint是为了保留java的无符号位移运算符(>>>)

int t1 = ((s13 << 96 - 66) | ((uint)s12 >> 66 - 64)) ^ ((s13 << 96 - 93) | ((uint)s12 >> 93 - 64));

1 个答案:

答案 0 :(得分:3)

当使用int操作uint时,结果很长。自然。

int t1 = (int)((((uint)s13 << 96 - 66) | ((uint)s12 >> 66 - 64)) ^ (((uint)s13 << 96 - 93) | ((uint)s12 >> 93 - 64)));

注意:c#编译器是 smart 并且可以处理常量。所以(uint)s | 1是因为它可以静态地确定。