const byte datapin = 2;
const byte clockpin = 3;
const byte latchpin = 4;

void setup() {
  pinMode(datapin, OUTPUT);
  pinMode(clockpin, OUTPUT);
  pinMode(latchpin, OUTPUT);
  digitalWrite(latchpin, HIGH);
  digitalWrite(clockpin, LOW);
}

void loop() {
  // light each of the 16 sixteen LEDs in sequence
  for (byte led = 0; led < 16; led++) {
    uint16_t data16 = 1 << led;

    if (0) { 
      // duplicates bit7.  bit15 is lost
      uint8_t data8a = data16 >> 8;
      uint8_t data8b = data16;
      shiftOut(datapin, clockpin, MSBFIRST, data8a);
      shiftOut(datapin, clockpin, MSBFIRST, data8b);

    } else {
      // clock it out manually; same results
      uint8_t bit = 16;
      digitalWrite(latchpin, LOW);
      do {
        bit--;
        digitalWrite(clockpin, LOW);
        digitalWrite(datapin, (data16 >> bit) & 1);
        digitalWrite(clockpin, HIGH);
      } while (bit > 0);
      digitalWrite(latchpin, HIGH);
    }

    delay(1000);
  }
}
74HC595
74HC595