一种天真的方法是使用 4 个局部变量:
int chromatid1Start;
int chromatid1End;
int chromatid2Start;
int chromatid2End;
然后,将输入分配给chromatid1
前两个变量和chromatid2
后两个变量。
chromatid1Start = chromatid1;
chromatid1End = chromatid1;
chromatid2Start = chromatid2;
chromatid2End = chromatid2;
对染色单体变量执行右移Start
直到交叉点,然后左移完全相同的量。在End
染色单体变量上,左移到交叉点,然后右移完全相同的量。
chromatid1Start = (chromatid1Start >> 16 * crossoverPercent) << 16 * crossoverPercent;
chromatid1End = (chromatid1End << 16 * (1 - crossoverPercent)) >> 16 * (1 - crossoverPercent);
chromatid2Start = (chromatid2Start >> 16 * crossoverPercent) << 16 * crossoverPercent;
chromatid2End = (chromatid2End << 16 * (1 - crossoverPercent)) >> 16 * (1 - crossoverPercent);
这样,您可以将一个的开头与另一个的结尾交叉:
int daughterChromatid1 = chromatid1Start + chromatid2End;
int daughterChromatid2 = chromatid2Start + chromatid1End;