Shift register help

Hi,
i have a code that work well with shift register....
i have 2 shift registers and 16 LEDs
now i can change the walues of registers just fine...
this is my code

//variables
byte data_0_4;
byte data_5_8;
byte data_9_12;
byte data_13_16;
byte dataArrayShift[10];
                                
dataArrayShift[0] = B0111;//3
dataArrayShift[1] = B1001;//4
dataArrayShift[2] = B1011;//5
dataArrayShift[3] = B1101;//6
dataArrayShift[4] = B1111;//7

this is in main loop

//start:the main code
 for(int i=0; i < 6; i++){
    if(i==0)
      digitalWrite(13,HIGH);
    else
      digitalWrite(13,LOW);

      data_0_4  = dataArrayShift[i];
      data_5_8  = dataArrayShift[i];//.dataArrayShift[i];//dataArray_8_16[i];
      data_9_12 = dataArrayShift[i];
      data_13_16= dataArrayShift[i];

      digitalWrite(shiftL_pin, 0);
        shiftOut(shiftD_pin, shiftC_pin, data_13_16); 
        shiftOut(shiftD_pin, shiftC_pin, data_9_12);   
        shiftOut(shiftD_pin, shiftC_pin, data_5_8);   
        shiftOut(shiftD_pin, shiftC_pin, data_0_4);   
      digitalWrite(shiftL_pin, 1);
      delay(100); 
  }

these is the shift function

void shiftOut(int myshiftD_pin, int myshiftC_pin, byte myDataOut) {
  //internal function setup
  int i=0;
  int pinState;
  pinMode(myshiftC_pin, OUTPUT);
  pinMode(myshiftD_pin, OUTPUT);
  digitalWrite(myshiftD_pin, 0);
  digitalWrite(myshiftC_pin, 0);
  for (i=3; i>=0; i--)  {
    digitalWrite(myshiftC_pin, 0);
    if ( myDataOut & (1<<i) ) {
      pinState= 1;
    }
    else {	
      pinState= 0;
    }
    digitalWrite(myshiftD_pin, pinState);
    digitalWrite(myshiftC_pin, 1);
    digitalWrite(myshiftD_pin, 0);
  }
  digitalWrite(myshiftC_pin, 0);  //stop shifting
}

Now what i want to be able is to change just one bit without changing others

Now lets say the current values are like
0111 0111 0111 0111
Now i want o have
0111 0110 0111 0111

But don't want to touch/change enithing else..
How can i do this?

Nobady really?
Dose this mean there is no solution for this?

Look at the bitSet() and bitClear() functions

Now lets say the current values are like

The current value of what?

Ales:
Now what i want to be able is to change just one bit without changing others

Now lets say the current values are like
0111 0111 0111 0111
Now i want o have
0111 0110 0111 0111

But don't want to touch/change enithing else..
How can i do this?

It looks like you want to clear the low bit of data_9_12. To do that:

data_9_12 &= 0b1110;

Then you have to shift out the 16 bits again.
Most people would put the 16 bits to be sent in an unsigned int and use shiftOut() twice to send the two bytes of that int.