繁体   English   中英

将Java代码转换为C ++

[英]Converting java code to 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 ++中测试所有这些-在进行转换时是否可以运行一些单元测试。

首先, |=是复合的按位或分配。 a |= b等效于a = a | b a = a | b ,如果设置了ab中的a位(或同时设置了这两个位),则将设置每个结果位。

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

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。 这是我的意思的例子

最后, >>>在Java中称为unsigned right shift运算符。 通常, >>将移位这些位,但保留最左边的位不变以保留数字的符号。 有时这可能不是您想要的。 >>>始终将0放置在那里,而不是假定符号很重要。

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

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

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

有CppUnit。 尝试使用它。

关于如何用C ++编写最终类没有直接的答案。 Google会向您展示很多示例。 例如,私有构造函数或朋友类。

| 是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(){

    }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM