Choosing Appropiate IC to Shift Voltage Levels for I2C Communication

I have seen several references to using the CD4050 non-inverting hex buffer converter between Uno's 5 volt I/O and 3.3 volt I2C sensors, but I have also seen a few references suggesting the use of IT's 74LVT245 Low Voltage Octal Bidirectional Transceiver with 3-STATE Inputs/Outputs if the communication is to be bi-directional; Sparkfun also sells the Level Translator Breakout - PCA9306 which I understand is bi-directional. When I'm using I2C sensors, either singularly or daisy chained, I'm having to send info back-and-forth when requesting data. Could someone please explain when it's appropriate to use the CD4050 versus a bi-directional level shifter like the 74LVT245?

Neither is appropriate for I2C, which needs 2 way dataflow without direction selection on the SDA line. A pullup resistor to 3.3V on SCL & SDA will let all devices communicate; 2.7K should be good (vs 4.7K on a 5V system). You may need to disable the internal pullup to 5V if using the Wire.h library on a 5V powered Arduino.

An I2C mux will let you have devices with the same I2C address as well: