将java代码转换为c ++

时间:2012-06-03 23:14:07

标签: java c++

如何将下面的java代码转换为C ++。我知道我可以写 typedef unsigned char byte因此需要注意,但我不明白|=<<=的含义。如何替换final

public static final long unsignedIntToLong(byte[] b) {
          long l = 0;
          l |= b[0] & 0xFF;
          l <<= 8;
          (l >>> 4) & 0x0F;

如何在C ++中测试所有这些 - 我可以在进行转换时运行一些单元测试。

3 个答案:

答案 0 :(得分:5)

首先,|=是复合按位OR赋值。 a |= b相当于a = a | b,如果ab中的某个位置位(或两者都有),则会设置每个结果位。

这是一个应用于每个位的真值表:

a | b | result
--------------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1

其次,<<=是相同的,但不是按位,而是向左移位。 AL1现有位向左移动该量,右侧用0填充。

101 << 1 == 1010
110 << 2 == 11000

final与变量定义的C ++ const相同。但是,如果要阻止函数被覆盖,则可以将final标记到函数头的末尾,如果该函数也是一个虚函数(需要将其重写为第一名)。但这仅适用于C ++ 11。这是我的意思example

最后,>>>在Java中被称为unsigned right shift运算符。通常,>>将移位这些位,但保留最左边的位以保留数字的符号。有时可能不是你想要的。 >>>会一直放0,而不是假设标志很重要。

但是,在C ++中,signed是一个现实,它是变量类型的一部分。如果一个变量被签名,>>将像Java那样向右移动,但如果变量是无符号的,它将像Java中的无符号右移(>>>)运算符一样。因此,C ++只需要>>,因为它可以推断出要做的事情。

答案 1 :(得分:3)

| =在两种语言中都是相同的:按位或应用于lhs变量,就像+ =一样。与&lt;&lt; =;相同它是移位位左操作符。

无符号长可能很棘手;在Java中没有这样的东西。

有CppUnit。尝试使用它。

答案 2 :(得分:0)

关于如何用C ++编写最终类没有直接的答案。谷歌将向您展示很多例子。例如私有constuctor或frend类。

|是OR运算符。所以例如0x10 | 0x10 = 0x11。

&LT;&LT;是bitshift运算符。因此,例如0b1&lt;&lt; 0b1 = 0b10,10 <&lt;&lt; 0 2 = 0b1000,依此类推。换1乘以你的值乘以2.

例如:

class Converter{
public:
    static Converter * createInstance()
    {
        return new Converter;
    }

    long unsignedIntToLong(unsigned char *b){
        long l = 0;
        l |= b[0] & 0xFF;
        l <<= 8;
        //..
        return l;
    }
private:
    Converter(){

    }
};