c++ - 混淆的 C++ 翻译 : float&, 两个 for 循环

标签 c++ raytracing deobfuscation

我正在阅读 Hacker News 和 this article上来了。它包含一个光线追踪器,代码写在名片背面。我认为将 c++ 转换为 python 将是一个很好的学术挑战,但有几个概念我坚持不懈。

首先,这个函数出现:i T(v o,v d,f& t,v& n){...}翻译成int Tracer(vector o, vector d, float& t, vector& n){...} float& 是什么意思意思是?我知道在其他地方&用作 ==是这样吗?你能用 C++ 做到这一点吗?

其次,我注意到这三行:

for(i k=19;k--;)  //For each columns of objects
for(i j=9;j--;)   //For each line on that columns
if(G[j]&1<<k){

我知道 <<是位移位,我假设 &== . for 循环就像一个 for 循环在另一个循环中一样吗?

最后,这一行:v p(13,13,13);我不太确定它的作用。它是否创建了一个由 p 标记的类,该类使用默认值 13、13、13 扩展 v( vector )?

这些可能是愚蠢的问题,但我想看看我是否能理解这一点,但我的搜索没有找到任何结果。提前致谢!

最佳答案

What does the float& mean?

在这里,&表示“引用”,因此参数通过引用传递。

I know that in other places & is used as a == is that the case here?

&在不同的上下文中表示不同的事物,但它绝不表示 == .在这种情况下,它也不是运算符(operator);它是类型规范的一部分,这意味着它是一个引用类型。

I know the << is a the bit shift, and I assume the & is ==

不,它是一个位与运算符。结果设置了它的位,其中一个位在两个操作数中都设置了。在这里,用 1<<k作为一个操作数,结果是 G[j] 的第 kth 位;所以这会测试该位是否已设置。

Are the for loops just like one for loop in an other?

是的。如果您不在 for 循环的主体周围使用大括号,那么主体就是单个语句。所以在这种情况下,第一个循环的主体是第二个循环。为了明确这一点,我建议缩进循环体,并使用大括号,无论它们是否绝对必要。但当然,我不会(故意)编写混淆代码。

Finally, this line: v p(13,13,13);

v是一个带有三个参数的构造函数的类。这声明了一个名为 p 的变量, 类型 v , 使用该构造函数初始化;即三个坐标被初始化为13 .

关于c++ - 混淆的 C++ 翻译 : float&, 两个 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18986863/

相关文章:

algorithm - 如何找到给定十六进制的 xor key /算法?

c++ - 在 C++ 中定义简单宏时出错

c++ - 消息传递协议(protocol)

c++ - SDL2 无法创建窗口,因为找不到匹配的 GLX 视觉对象

c++ - GPU 计算 (CUDA) tex2d/tex3d - 如何处理各向异性像素/体素

c++ - 光线追踪锥。判别式给出 -ve 值,因此没有交叉点

java - 使用 ArrayList 显示多个 vector 对象 Java

javascript - 混淆的javascript代码

这四行棘手的 C 代码背后的概念

c++ - 语法平衡问题