I did a little test on a 74HC595 shift register as follows:
I tied OE (pin 13) to ground to enable outputs. I tied MR (pin 10) to VCC (+5VDC/logic high) to prevent a reset. I connected SCK, RCK, and DS (pins 14, 11, and 12) to individual I/O lines of an uninitialized AT89C2051 microcontroller and connected 10K pull-up resistors to each line. I connected the lowest bit output (pin 15) to a LED through a 1K resistor to see what's going on.
The AT89C2051 doesn't ground any I/O lines when it is initialized with no code, and even with an accidental reset on the AT89C2051, the I/O lines would remain unchanged.
I also used several 2.2uF decoupling capacitors.
Once I powered it up, the LED immediately turned on. I tested every output pin of the 74HC595 and they all were logic high instead of logic low.
Why does this happen?
I have verified that the 74HC595 works by replacing the AT89C2051 with an empty 20 pin socket and applying logic levels to the appropriate pins but I don't understand why it (74HC595) would start up with logic high outputs instead of logic low.