My link above more or less explains it. The Wire library expects the address without the read/write bit (the library adds that).
For example, if the address was 0x20, I2C expects the device to send:
0x40 to write ((0x20 >> 1) + 0)
0x41 to read ((0x20 >> 1) + 1)
The specifications for the device should make it clear if they have already shifted the address or not.
I cant understand shifting works if the address is completely different.
0x90 shifted right one is 0x48. It isn't completely different. In decimal they are 144 and 72. One is half the other.