我的任务是将此 C++ 代码移植到 Java。我对 Java 的掌握比对 C++ 的掌握要好得多。我在很大程度上理解位移位,但我并不真正理解 unsigned long 值在这种情况下的作用。
这在 Java 中会是什么样子?
#include <iostream>
using namespace std;
int main() {
short netSpeed = 3;
cout << "netSpeed before: " << netSpeed << endl;
netSpeed = 1UL << netSpeed;
cout << "netSpeed after: " << netSpeed << endl;
return 0;
}
最佳答案
C++ 开发人员不会冒险使用平台表示的带符号整数类型,它可以是 1 或 2 的补码。由于整数值 1 的溢出可能小至 16 位 int
,他们还保护自己免受未定义行为的影响。 .
使用 1UL 让他们放心,移位的结果将是 0b1000。 UL
强制编译器使用 unsigned long
类型。
实际上在这种情况下它是多余的,并且考虑到 Java 总是 对整数类型使用 2 的补码(并且它们都是有符号的,除了 char
类型),这对您来说是绝对安全的写1 << netSpeed
在您的 Java 端口中。
关于java - 从 C++ 到 Java 的简单转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32461859/