[英]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
,如果设置了a
或b
中的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.