Côté entrée, il faut connaître le seuil de basculement, et ajouté aux marges, cela donne les niveaux qui permettent de garantir l'état 0 ou 1. On a des technos ou le seuil est autour de la moitié de l'alimentation, et avec les marges, cela va donner par exemple 0.7 x Valim pour garantir un niveau haut et 0.3 x Valim pour garantir le niveau bas. Un circuit 5V dans ces conditions réclamera au moins 3.5V pour avoir le niveau haut garanti, et ne fonctionnera pas avec une sortie alimentée en 3.3V, sortant au mieux 3.3V. En pratique, cela peut fonctionner, mais ce sera la loterie, et marcher un jour et pas le suivant, ou avec plein d'erreurs. Un transistor en collecteur ouvert peut être utilisé mais les signaux seront déformés et peu rapides en montée.
Il y a des circuits qui ont un seuil d'entrée fixe, autour de 1.2V par exemple, et avec 1.5V on est sûr qu'il sera au niveau 1. Donc alimenté en 5V, cela fonctionnera bien avec une sortie 3.3V normale.
Dans l'autre sens, une entrée d'un circuit en 3.3V peut être compatible ou non avec une sortie 5V. Si non, cela veut dire qu'il y a une diode entre l'entrée et l'alimentation 3.3V. Si on y connecte une sortie 5V, cela peut marcher si la sortie 5V fournit peu de courant, elle va alors s'écrouler à 3.3V. Sinon, soit la diode va claquer, soit on alimenter le circuit 3.3V par cette entrée, et l'alimentation de 3.3V va éventuellement monter nettement au delà des 3.3V, et on grille tout. Si on met une résistance série, c'est le niveau bas qui ne sera peut-être plus garanti, et les temps de montée et descente seront dégradés, provoquant d'autres problèmes potentiels.
Les sorties elle-mêmes ont des niveaux de tensions qui varient en fonction de ce qu'on y raccorde. Ce n'est jamais 0 et Valim, même si c'est souvent approchant sur les circuits actuels, plus qu'avant.
Bref, il faut savoir ce que l'on fait, mais les adaptations à base de résistances sont rarement une bonne idée, sauf pour des signaux lents et dont la raideur des fronts n'a pas d'importance (signaux lents ne veut pas dire forcément que les fronts peuvent être n'importe comment).
Donc, soit les entrées et sorties sont naturellement compatibles, soit on utilise des circuits d'adaptation. Il en existe pas mal, même pour les circuits bidirectionnels. C'est aussi plus simple et plus fiable que les systèmes faits en discret à partir de résistances et de transistors.
Aujourd'hui, on a beaucoup de circuits qui sont compatibles 3.3V et 5V, dans les deux sens. Mais ce n'est pas automatique ! Si on ne vérifie pas, on risque les problèmes.
Pour Moissan : il existe bien des convertisseurs bidirectionnels :
http://www.ti.com/lit/ds/symlink/txs0102.pdf
et
http://www.ti.com/lit/ds/symlink/txb0102.pdf
par exemple.