The I2C bus consists of two wires, one data (SDA), and one clock (SCL). Both are passively pulled to VCC (on the Raspberry Pi, this is 3.3 V) with pull-up resistors. The Raspberry Pi will control the clock by pulling it low every cycle and the data line can be pulled low by Raspberry Pi to send commands or by the connected device to respond with data:
Since the slave devices can only pull the data line to GND, the device may be powered by 3.3 V or even 5 V without the risk of driving the GPIO pins too high (remember that the Raspberry Pi GPIO is not ...