Just nu i M3-nätverket
Gå till innehåll

Funktion: binära tal till decimala


djb

Rekommendera Poster

Här är en funktion som gör om binära tal till decimala. Helt enkelt lite tidsfördriv som jag delar med mig av.

 

info: biblioteken math.h och iostream behövs för kompilering.

 

long double binarTILLdecimal (char inmatning[50])
{
int rakneverk=50, temp=-52, nolletta, exponent=0; //exponenten börjar på 0, d v s t.ex. när uträkningen kommer är exponenten för fjärde
long double sum=0;								 //talet '3'. 2^0=1, (första talet)   sum är summan allteftersom
while (temp==-52)				//-52 är integern för ett obestämt tecken i char-harrangen.
{
	temp=inmatning[rakneverk]; //rakneverk börjar på 50 och sjunker. 
	rakneverk--;					//här minimeras charen så inte alla 50 tecken kommer med.
}
for (; rakneverk>=0; rakneverk--)
{
	nolletta=inmatning[rakneverk]-48; //här tar jag minus 48 för att det är någon skum char- till int-konvertering.
	if (nolletta==0 || nolletta==1)
	{
		sum=sum+nolletta*pow(2, exponent); //t.ex tredje talet (etta. de andra två har vart nollor): sum=0+1*2^2(=4)
		exponent++;
	}
	else
		rakneverk=-2;
}
if (rakneverk==-1)
	return(sum);
else
	return(false);
}

 

Länk till kommentar
Dela på andra webbplatser

En smula kortare variant är att använda funktionen strtol (finns i stdlib);

 

long int x = strtol(argv[1], NULL, 2);

 

Ett litet binär-till-decimal-konverteringsprogram blir då:

 

#include <stdlib.h>
#include <stdio.h>

int
main(int argc, char*argv[])
{
  if(argc!=2)
     return(-1);

  long int x = strtol(argv[1], NULL, 2);

  printf("%ld\n", x);

  return 0;
}

 

Den klarar för övrigt av alla baser mellan 2 och 36.

 

Länk till kommentar
Dela på andra webbplatser

Fantastiskt. Det hade jag ingen aning om. Jag tror nog i och för sig att det var lärorikt för mig att göra min svåra väg ändå, även om det inte var den bästa. ;)

 

Länk till kommentar
Dela på andra webbplatser

Jag tror nog i och för sig att det var lärorikt för mig att göra min svåra väg ändå

 

Absolut! Och dessutom roligare :)

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...