从C ++到Java的简单转换

时间:2015-09-08 15:37:16

标签: 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;
}

2 个答案:

答案 0 :(得分:3)

C ++开发人员没有采用平台表示有符号整数类型的机会,这可能是1或2的补码。由于积分值1的溢出可能会小到16位int,它们也会防止未定义的行为。

使用1UL让他们放心,转移的结果将是0b1000。 UL强制编译器使用unsigned long类型。

实际上在这种情况下它是多余的,并且考虑到Java 始终使用2的补码作为整数类型(除了char类型之外它们都是有符号的),它非常安全您可以在Java端口中编写1 << netSpeed

答案 1 :(得分:-2)

这是您的代码从C ++到Java的确切转换:

class Speed {
    public static void main(String args[]) {
       short netSpeed = 3;
       System.out.println("netSpeed before: "+netSpeed);

       netSpeed = (short) (1 << netSpeed);
       System.out.println("netSpeed after: "+netSpeed);
    }
}