我是一名试图迁移到 C# 的 Java 程序员,这个问题让我有点难过:
int a = 1;
a = 0x08000000 | a;
a = 0x80000000 | a;
第一行编译得很好。第二个没有。似乎认识到有一个带有符号位的常量,并且由于某种原因它决定将结果转换为 long,从而导致错误:
无法将类型“long”隐式转换为“int”。
存在显式转换(您是否缺少演员表?)
到目前为止我的修复是:
a = (int)(0x80000000 | a);
其中涉及演员,但仍然留下警告:
用于符号扩展操作数的位或运算符;
考虑先转换为更小的无符号类型
以错误/警告/无长时间的方式表达这一点的正确 C# 方式是什么?