C#按位异或 (^)与Java按位异或 (^)的比较

6

我正在将一些Java代码转换为C#,迄今为止一切都运行得很好,但是我遇到了一个使用^操作符的问题。 在C#中,Console.WriteLine(127 ^ 0xffffffff); 打印出4294967168,而在Java中 System.out.println(127 ^ 0xffffffff); 打印-128。 我一直在寻找是否需要使用其他替代方法,但是我还没有找到。


忘记添加了,我需要它打印-128。 - Orion
2
在Java中,操作数被提升为类型“int”,结果是一个“int”。在C#中,操作数被提升为“uint”,结果是一个“uint”。适当的强制转换应该解决这个问题。 - John Bollinger
1个回答

8

C#支持有符号和无符号整数(Java仅支持有符号整数):

  unchecked {
    // you want signed int
    int result = (int) (127 ^ 0xffffffff);

    Console.WriteLine(result);
  }

2
真正的问题在于0xffffffff无法表示为有符号整数中的正数,这会导致它被解释为无符号整数。0xff将被解释为int而不是unsigned int。 - Voo
啊!我真傻。非常感谢你!当它让我选择答案时,我会在大约6分钟内选择它。 - Orion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接