将 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++中测试所有这些 - 在进行转换时是否可以运行一些单元测试。
首先,|=
是一个复合位 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(){
}
};
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将无符号char*转换为std::istream*C++