Wra*_*967 5 c++ unary-operator
我目前正在将一些OpenCV代码从C++转换为Java.我不能使用JavaCV,因为我们需要在本机Java中进行转换,而不是JNA.在代码中的某一点,我得到以下任务:
dst[x] = (uchar)(-(kHit >= kForeground));
Run Code Online (Sandbox Code Playgroud)
当dst被uchar*,kHit且kForeground是int秒.
我一直无法找到有关其工作原理的任何信息,Java也不会将其识别为操作.这两个变量在代码的另一个点上有一个操作,它存储两个值中的一个:255或0.
有问题的代码来自opencv/video/src/bgfg_gaussmix.cpp.
在C++中,布尔表达式产生两个值之一 - 0或1.当您将一元减号-应用于结果时,您得到0或-1.当你重新解释-1为uchar,你得到255.
您可以使用条件将此表达式转换为Java:
dst[x] = (kHit >= kForeground) ? 255 : 0;
Run Code Online (Sandbox Code Playgroud)
由于分支,它不会像原始分支一样快.然而,由于Java缺乏将布尔值重新解释为数值的能力,因此关于它的速度几乎无法做到.
kHit >= kForeground返回或者,true或者false以C++的方式返回1或者0.前面的减号将其转换为-1或0.演员以uchar((uchar))返回0了0后回255为负-1.
在康拉德的评论之后,我也怀疑这个定义是否明确.它定义明确,但就可读性而言,它仍然是一段糟糕的代码.:)
| 归档时间: |
|
| 查看次数: |
1979 次 |
| 最近记录: |