Conversion avec opérateur binaire

Description

Il existe des milliers de source pour convertir un nombre en une autre base, mais beaucoup ce limite à faire ces conversion avec les opérateurs Division et Modulo. Je propose une méthode très différentte de celle-ci en introduisant les opérateurs binaires, ainsi que la propriété prototype afin de rajouter ces propres méthodes à des objets comme String et Array.

Source / Exemple :


function dec2bas(nombre,base)
{
	if (!getDecalageFromBase(base))
	{
		alert("Base Invalide");
		return false;
	}
	
	equivalent = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v");
	decalage = getDecalageFromBase(base);
	result = "";
	while(nombre != 0)
	{
		result = equivalent[nombre&(base-1)]+result;
		nombre >>= decalage;
	}
	return result;
}

function bas2dec(nombre,base)
{
	nombre = nombre.reverse();
	equivalent = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v");
	result = 0;
	for (i=0;i<nombre.length;i++)
	{
		result += equivalent.array_search(nombre.charAt(i))*Math.pow(base,i);
	}
	return result;
}

function getDecalageFromBase(base)
{
	i = 1;
	while (Math.pow(base,(1/i)) != 2)
	{
		if (i>base)
		{
			return false;
		}
		i++;
	}
	return i;
}

function array_search(text)
{
	for (a=0;a<this.length;a++)
	{
		if(this[a] == text)
		{
			return a;
		}
	}
}

function reverse()
{
	result = "";
	for (i=this.length-1;i>=0;i--)
	{
		result += this.charAt(i);
	}
	return result;
}

Array.prototype.array_search = array_search;
String.prototype.reverse = reverse;

Conclusion :


Rapidement je vous explique comment la conversion se fait. Supposons que je veux convertir le nombre 20 en hexadécimal.

20 en binaire est 10100 et pour diviser un nombre binaire en hexadécimal il faut le séparer par tranche de 4 bits. Pour le diviser en groupe de 4 bits le script utilise 2 opérateurs binaires & et >>. Le & sert a faire un masque afin de retirer seulement 4 bits à la fois et le >> sert a décaler les bits afin qe se soit quatres nouveaux bits qui soit analyser la prochaine fois. Ainsi mon nombre 20 sera diviser en 1 (0001) et 4 (0100) qui donne 14 en hexadécimal.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.