Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
272 views
in Technique[技术] by (71.8m points)

c - What does this loop mean (i=(unsigned long)1<<(bitnum-1); i; i>>=1)

I'm trying to understand the following code that written in C. I found a few lines that are difficult to understand.

unsigned long reflect (unsigned long crc, int bitnum) {
  // reflects the lower 'bitnum' bits of 'crc'
  unsigned long i, j=1, crcout=0;
  for (i=(unsigned long)1<<(bitnum-1); i; i>>=1)
  {
    if (crc & i) crcout|=j;
      j<<= 1;
  }
  return (crcout);
}

In this subroutine, I don't understand the for loop why the second parameter only i, also why and what does this mean: i>>=1? How is this loop evaluated here?

Could someone help me here to understand it And MAYBE give an example in C# as I'm familiar with it? I need to implement this function into my PLC program.

question from:https://stackoverflow.com/questions/65940567/what-does-this-loop-mean-i-unsigned-long1bitnum-1-i-i-1

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...