3

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

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

1 回答 1

3

当 uint 与 int 一起操作时,结果很长。自然。

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

注意:c# 编译器很聪明,可以处理常量。所以 (uint)s | 1 是 uint 因为它可以静态确定。

于 2012-10-27T03:40:13.533 回答