【发布时间】:2012-08-24 00:15:28
【问题描述】:
我是一个试图从 C++ 代码中理解算法的新手,之后我想在 java 中实现它,但我发现理解代码有困难,这里有 3 段代码让我感到困惑
inline Edge *Node::NextEdge( Edge *prev)
{
for (int i = 0; i < 4; i++)
prev = (Edge *) ( (int) prev ^ (int) edge[i] );
return prev;
}
//_____________ em>_______________________________________
if (nextfrag)
{
if ( --nextfrag->degree)
new_frag( nextfrag, fragnum, len, edge );
//_____________ em>____________________________________
for (pedge = edge; pedge->parent; pedge = pedge->parent);
我对第一个代码的问题:迭代如何在按位异或运算中工作? prev = (Edge *) ( (int) prev ^ (int) edge[i] ); 是什么意思? return prev 的值是多少?
第二个代码的问题:减少运算符if ( --nextfrag->degree) 如何在 if 语句中工作?
第三个代码:有没有其他方法可以编写该 for 语句?请向我解释一下 for 语句的意思,因为作为一个新手,我只是习惯于 i= 0;我=某事;我++
对不起,愚蠢的问题,但你的解释会对我有很大帮助,在此先感谢:)
【问题讨论】:
-
3:
Edge pedge = new Edge(edge); while(pedge.getParent() != null) {/*...*/ pedge = pedge.getParent();} -
1 将指针转换为 int,执行异或并将结果转换回指针。如果我没记错的话,这在 64 位系统上可能会失败。
-
@zapl 但不知何故,我读到在这种情况下 Xor 的实现并不意味着将对象转换为 int,它是关于“如果两个对象不同则返回 1”,就是这样为什么我很困惑
-
在我看来它不是将对象而是将该对象的指针/内存地址转换为 int。但请注意,我的 C 技能很差 :)
-
您使用的是指针,但将问题标记为“Java”?
标签: java c++ algorithm operator-keyword