文档介绍:/*LSB---低字节位*/  /*MSB---高字节位*/  /* Masks for the three shift registers */  #define R1MASK 0x07FFFF /* 19 bits, numbered 0..18 */  #define R2MASK 0x3FFFFF /* 22 bits, numbered 0..21 */  #define R3MASK 0x7FFFFF /* 23 bits, numbered 0..22 */  /* Middle bit of each of the three shift registers, for clock control */  #define R1MID 0x000100 /* bit 8 */  #define R2MID 0x000400 /* bit 10 */  #define R3MID 0x000400 /* bit 10 */  /* Feedback taps, for clocking the shift registers.  * These correspond to the primitive polynomials  * x^19 + x^5 + x^2 + x + 1,   * x^22 + x + 1,  * x^23 + x^15 + x^2 + x + 1.   */  #define R1TAPS 0x072000 /* bits 18,17,16,13 */  #define R2TAPS 0x300000 /* bits 21,20 */  #define R3TAPS 0x700080 /* bits 22,21,20,7 */  /* Output taps, for output generation */  /* 高位是高字节 */  #define R1OUT 0x040000 /* bit 18 (the high bit) */  #define R2OUT 0x200000 /* bit 21 (the high bit) */  #define R3OUT 0x400000 /* bit 22 (the high bit) */  typedef unsigned char byte;  typedef unsigned long word;  typedef word bit;  /* Calculate the parity of a 32-bit word, . the sum of its bits modulo 2 */  bit parity(word x) {  x ^= x&gt;&gt;16;  x ^= x&gt;&gt;8;  x ^= x&gt;&gt;4;  x ^= x&gt;&gt;2;  x ^= x&gt;&gt;1;  return x&1;  }  /*Above is cool,but why?  int parity(unsigned long ino)  {  int noofones = 0;  unsigned long mask = 0x00000001ul; /* start at first bit */  while(mask != 0) /* until all bits tested */  {  if(mask & ino) /* if bit is 1, increment noofones */  {  noofones++;  }  mask = mask <&lt; 1; /* go to next bit */  }  /* if noofones is odd, least significant bit will be 1 */  return (noofones & 1);   }  */  /* Clock one shift register */  word clockone(word reg, word mask, word taps) {  word t = reg & taps;//仅取抽头位,做反馈用  reg = (reg &lt;&lt; 1) & mask;//左移一位,&掩码,则表示只取掩码位  reg |= parity(t);//反馈位  return reg;  }  /* The three shift registers. They're in global variables to make the code  * easier to understand.  * A better implementation would not use global vari