Using Shift Register, need improvement for figuring out falling values

I am using a shift register to read in 8 digital values as a byte.

I need to react every time a bit falls from a 1 to a 0.

What I have right now is this:

  int isHigh[8] = {0, 0, 0, 0, 0, 0, 0, 0};

void doBitCompare() {
  byte newVals= readShiftRegister();

  int ibit = bitRead(newVals, 0);
  if (ibit != isHigh[0]) {
    isHigh[0] = ibit;
    if (ibit == 0) {
      doMyThing();
    }    
  }
}

This last part is compared for all 8 bits obviously. I know that this could also be done using a loop, but I think 8 if's are faster.

Is there any better or faster way to do this?

Thanks a lot
Michael

byte oldVals = 0xFF;

void doBitCompare() {
  byte newVals= readShiftRegister();
  byte changeMask = oldVals & ~newVals;  // Set bits where old is 1 and new is 0
  if (changeMask != 0)
    doMyThing();
  oldVals = newVals;
}

If you want to act on individual bits you just look through changeMask for the 1 bits. Those are the bits that changed from 1 to 0.

 if (bitRead(changeMask, 0))
   doMyThing(0);

 if (bitRead(changeMask, 1))
   doMyThing(1);

 if (bitRead(changeMask, 2))
   doMyThing(2);
.
.
.