java - 从 C++ 到 Java 的简单转换

标签 java c++

我的任务是将此 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/

相关文章:

java - 某些同等条件不起作用

java - InputStreamReader(InputStream in, Charset cs) 返回的文本字符集是什么

c++ - 将随机数放入缓冲区以写入文件的有效方法是什么?

c++ - 为什么在初始化堆栈时会出现此错误?

java泛型,关于extends和super的说明

java - 使用resteasy/jax-rs从请求有效负载接收两种类型的数据

java - 如何在类和jvm中获取 Activity 对象?

c++ - 如何为包含另一个类的类编写构造函数?

c++ - 如何在 C++ 中传递 "this"

c++ - 在 C++ 中验证一个字符串是否只包含字母