将 java 代码转换为 c++

Converting java code to c++

本文关键字:c++ 转换 代码 java      更新时间:2023-10-16

如何将以下一段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++中测试所有这些 - 在进行转换时是否可以运行一些单元测试。

首先,|=是一个复合位 OR 赋值。 a |= b 等效于 a = a | b ,如果设置了 a 中的位或b位(或两者兼而有之),则将设置每个生成的位。

下面是应用于每个位的真值表:

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

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

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

final与变量定义的C++const相同。但是,如果要防止某个函数被覆盖,则可以将final标记到函数标头的末尾(如果该函数也是虚函数(首先需要这样做才能被覆盖)。不过,这仅适用于C++11。这是一个例子来说明我的意思。

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

但是,在C++中,signed是变量类型的一部分。如果一个变量是有符号的,>>会像Java一样右移,但如果变量是无符号的,它将像Java中的无符号右移(>>>)运算符一样。因此,C++只需要>>,因为它可以推断出该做什么。

|=

在两种语言中是相同的:按位 OR 应用于 lhs 变量,就像 += 一样。 与 <<= 相同;它是移位位左运算符。

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

有CppUnit。 尝试使用它。

关于如何用C++编写最终课程没有直接的答案。不过,谷歌会给你看很多例子。例如,私人建筑师或朋友类。

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

<<是位移运算符。例如 0b1 <<0b1 = 0b10,10 <<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(){
    }
};