减少,if和for语句上的异或运算符(--) 我是一个新手,试图从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; }

减少,if和for语句上的异或运算符(--) 我是一个新手,试图从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; },java,c++,algorithm,operator-keyword,Java,C++,Algorithm,Operator Keyword,//\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu if (nextfrag) { if ( --nextfrag->degree) new_frag( nextfrag, fragnum, len, edge ); for (pedge = edge; pedge->parent; pedge =

//\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

if (nextfrag)
      {
      if ( --nextfrag->degree)
         new_frag( nextfrag, fragnum, len, edge );
for (pedge = edge; pedge->parent; pedge = pedge->parent);
我对第一段代码的问题是:在按位异或运算中迭代是如何工作的?什么是
prev=(Edge*)((int)prev^(int)Edge[i])平均值?return
prev
的值是多少?
关于第二个代码的问题:减少运算符
if(-nextfrag->degree)
如何在if语句中工作?
第三个代码:有没有其他方法来为语句编写该代码?请给我解释一下这个for语句的意思,因为作为一个新手,我只使用I=0;i=某物;我++

很抱歉问了这么愚蠢的问题,但你的解释会帮我很大的忙,提前谢谢:)

(Edge*)将结果强制转换为指向Edge对象(或结构)的指针

表达式正在将指针“prev”(一条边)强制转换为int,并使用数组元素Edge[i]执行XORing(不确定类型,因为此变量超出范围-但假设它是一个指向边的指针数组)。指针(地址)大小为int。不确定算法是什么,但似乎假定这将为下一次迭代生成指向另一条边的新有效指针地址

--nextfrag->degree
在本例中,递减nextfrag指向的degree成员,该成员是指向具有“degree”成员的结构的指针

for (pedge = edge; pedge->parent; pedge = pedge->parent);
这将在链接列表中循环,直到pedge->parent==0(链接列表中的头节点)

这段代码非常依赖于在单词边界上打包的结构。 指针(地址)是32位或64位的,因此这是非常糟糕的代码,除非您完全确定它将在哪个目标计算机上运行,因为如果不显式打包结构,它可能会在32位或64位计算机之间产生不同的结果。请参阅“#pragma pack”


这并没有使它更容易理解。

3:
Edge-pedge=newedge(边缘);当(pedge.getParent()!=null){/*…*/pedge=pedge.getParent();}
1将指针强制转换为int时,执行xor并将结果强制转换回指针。如果我没有弄错的话,这可能会在64位系统上失败。@zapl但不知何故我读到,在这种情况下,Xor的实现并不意味着将对象转换为int,而是关于“如果两个对象不同,则返回1”,这就是我困惑的原因。在我看来,它不是在将对象强制转换,而是将该对象的指针/内存地址转换为int。但要注意,我的C语言技能很差:)你在使用指针,但标记了问题“Java”?“--nextfrag->degree”并没有递减指针,它正在对“nextfrag”指向的“degree”成员进行减量。我可以这样说:
if
在减量
nextfrag->degree之后!=0然后{/..}
--nextfrag->degree
for (pedge = edge; pedge->parent; pedge = pedge->parent);