XOR递归函数返回除零和一之外的值

时间:2016-04-21 08:35:02

标签: c debugging xor

我正在为我的comsci课程做作业。但是,我对作业要求的内容没有任何疑问。想法是通过选择特定的位位置(抽头),将种子移位到左边1,然后使用XOR逻辑将0或1附加到种子的右端来基于种子随机生成数字。基本情况是6(0110)的种子,然后点击3和2. Tap3 = 0,Tap2 = 1,0 XOR 1 = 1.然后6(0110)向左移动并变为12(1100),最后1是添加,值变为13(1101)。在打印所需数量的值之前,抽头保持不变。在此Tap3 = 1和Tap2 = 0之后的含义。

int tapShift(int tempSeed, int tap){//shifts seed over to the desired tap and returns that tap value. 0 or 1
  int bitVal = tempSeed >> tap;
  bitVal == bitVal & 1;
  return bitVal;}

int xorTaps(int taps[], int length, int tempSeed){
  if(length == 0){
    return tapShift(tempSeed, 31);//return a-1 tap after all input taps.
  }else{//returns the binary value of selected tap to recursively determine XOR of taps.
    return tapShift(tempSeed, taps[length-1])^xorTaps(taps,--length, tempSeed);} }

我遇到的问题是xorTaps返回的值如6,7,5,3,而不是我认为可以返回的值。我一直在看这几个小时没有进展,因此我决定寻求帮助。我在代码中将xorTaps称为更远。

int feedback = xorTaps(taps, i , tempSeed);

必须始终将n-1位的抽头视为分配的一部分。这意味着始终在XOR算法中评估32位种子的31位的抽头。

1 个答案:

答案 0 :(得分:0)

好。我问我的兄弟姐妹谁更擅长调试。 20分钟后,我错误地打字了 bitVal == tempSeed& 1。 正确的代码是bitVal = tempSeed& 1。