Avatar billede bufferzone Praktikant
07. februar 2004 - 17:20 Der er 13 kommentarer

Artiken ønskes. omsætning binær - decimal og omvendt

Jeg kan godt omsætte mellem binære og decimale tal, man jeg må hver gang tænke mig om og oftest bruge papir.

Findes der ikke en der, en gang for alle, kunne lave en god pædagogisk artikel der i detaljer giver opskriften på en omsætnin på omregning mellem de to. Både fra decimal til binær og omvendt. Kunne e.v.t forklare subnetting som eksembel
Avatar billede NanoQ Nybegynder
07. februar 2004 - 23:15 #1
Jeg tilslutter mig lige koret... kompetent artikelforfatter søges! :)
Avatar billede athlon-pascal Juniormester
08. februar 2004 - 00:26 #2
2-talssystemet til 10-talssystemet:

Eksempel fra Gyldendals 3-binds leksikon:
"101010100 = 1*2^8 + 0*2^7 + 1*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = 256 + 64 + 16 + 4"

Det vil altså sige:
[ciffer]*2^[cifferposition fra højre (nulbasseret)]

En artikel vil ikke være en dårlig ide, hvis nogen er dygtige nok, og har tid nok til at skrive den :o)

Faktisk kan
[ciffer]*2^[cifferposition fra højre (nulbasseret)]
også skrives som
[ciffer]*[antal forskellige cifre i talsystem]^[cifferposition fra højre (nulbasseret)]
og bruges til at omregne fra mange talsystemer (herunder hex) til 10-talssystemet.
Avatar billede roenving Novice
10. februar 2004 - 01:52 #3
Og den simple løsning er at bruge basistallet til:

Pseudo-kode:
Konverter til 10-talssystem:

tal = første ciffer

for hvert ciffer{
  nyciffer = næste ciffer
  tal = tal * basistal + nyciffer
}

-- og konverter til basistal-system:

tal = tallet i 10-tal-systemet
resultat = ''

indtil tal = 0{
  ciffer = tal modulus basistal
  resultat = 'ciffer' + resultat /*mellemregning lavet i tekst-format*/
  tal = tal \ basistal /*heltalsdivision*/
}

-- og nu indeholder de fleste sprog jo muligheder for direkte konverteringer, så mon ikke det er at skyde over målet at lave en artikel, medmindre vi kan lave et team, som kan beherske de forskellige programmeringssprog ?-)
Avatar billede roenving Novice
10. februar 2004 - 02:30 #4
-- og en simpel maskine, du bare kan bruge:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Konverter fra og til 10-talssystem</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta name="keywords" content="roenving,http://www.eksperten.dk/spm/462212">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
body{
  font-family:tahoma,verdana,arial,sans-serif;
}
</style>
<script language="javascript" type="text/javascript">
function konverter(f){
  if(f.basisFra.value=='10'){
    if(f.talFra.value=='0')return;
    var basis = +f.basisTil.value;
    var tal = +f.talFra.value, res="";
    while(tal>0){
      res = tal%basis + res;
      tal = Math.floor(tal/basis);
    }
    f.talTil.value = res;
  }else{
    if(f.talFra.value=='0')return;
    var basis = +f.basisFra.value;
    var tal = f.talFra.value, res = 0;
    for(i=0;tal.length>i;i++){
      res = res * basis + +tal.substr(i,1);
    }
    f.talTil.value = res;
  }
}
</script>
</head>

<body>
<div style="text-align:center;font-size:large">Konvertér til og fra 10-talssystem</div>
<br>
<form id="minForm" name="minForm">
<table><tr>
  <th></th>
  <th>Fra</th>
  <th>Til</th>
</tr>
<tr>
  <td>Tal-system:</td>
  <td style="text-align:center">
    <select name="basisFra" id="basisFra" onchange="this.form.basisTil.disabled=(this.value!='10')?true:false;">
      <option value="2">2</option>
      <option value="3">3</option>
      <option value="4">4</option>
      <option value="5">5</option>
      <option value="6">6</option>
      <option value="7">7</option>
      <option value="8">8</option>
      <option value="9">9</option>
      <option value="10" selected>10</option>
      <option value="16">16</option>
      <option value="32">32</option>
      <option value="64">64</option>
    </select></td>
  <td style="text-align:center">
    <select name="basisTil" id="basisTil" onchange="this.form.basisFra.disabled=(this.value!='10')?true:false;">
      <option value="2">2</option>
      <option value="3">3</option>
      <option value="4">4</option>
      <option value="5">5</option>
      <option value="6">6</option>
      <option value="7">7</option>
      <option value="8">8</option>
      <option value="9">9</option>
      <option value="10" selected>10</option>
      <option value="16">16</option>
      <option value="32">32</option>
      <option value="64">64</option>
    </select></td>
</tr>
<tr>
  <td>Tal til konvertering:</td>
  <td><input id="talFra" name="talFra" type="text" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20"></td>
  <td><input id="talTil" name="talTil" type="text" disabled="disabled" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20"></td>
</table><br>
<button name="button2" id="button2" onclick="konverter(this.form);">Konverter</button>

</form>
</body>

</html>
Avatar billede roenving Novice
10. februar 2004 - 02:35 #5
Hov, jeg glemte lige en lille væsentlighed: at vi ikke har cifre til at repræsentere over 9, og slet ikke notation til at præsentere tal over 15, øjeblik !-)
Avatar billede roenving Novice
10. februar 2004 - 02:46 #6
Så skulle den virke indenfor sin begrænsning !-)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Konverter fra og til 10-talssystem</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta name="keywords" content="roenving,http://www.eksperten.dk/spm/462212">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
body{
  font-family:tahoma,verdana,arial,sans-serif;
}
</style>
<script language="javascript" type="text/javascript">
var nums = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];
var syms = new Array();
syms['0']=0;
syms['1']=1;
syms['2']=2;
syms['3']=3;
syms['4']=4;
syms['5']=5;
syms['6']=6;
syms['7']=7;
syms['8']=8;
syms['9']=9;
syms['a']=10;
syms['b']=11;
syms['c']=12;
syms['d']=13;
syms['e']=14;
syms['f']=15;
function konverter(f){
  if(f.basisFra.value=='10'){
    if(f.talFra.value=='0')return;
    var basis = +f.basisTil.value;
    var tal = +f.talFra.value, res="";
    while(tal>0){
      res = num[tal%basis] + res;
      tal = Math.floor(tal/basis);
    }
    f.talTil.value = res;
  }else{
    if(f.talFra.value=='0')return;
    var basis = +f.basisFra.value;
    var tal = f.talFra.value, res = 0;
    for(i=0;tal.length>i;i++){
      res = res * basis + syms[tal.substr(i,1)];
    }
    f.talTil.value = res;
  }
}
</script>
</head>

<body>
<div style="text-align:center;font-size:large">Konvertér til og fra 10-talssystem</div>
<br>
<form id="minForm" name="minForm">
<table><tr>
  <th></th>
  <th>Fra</th>
  <th>Til</th>
</tr>
<tr>
  <td>Tal-system:</td>
  <td style="text-align:center">
    <select name="basisFra" id="basisFra" onchange="this.form.basisTil.disabled=(this.value!='10')?true:false;">
      <option value="2">2</option>
      <option value="3">3</option>
      <option value="4">4</option>
      <option value="5">5</option>
      <option value="6">6</option>
      <option value="7">7</option>
      <option value="8">8</option>
      <option value="9">9</option>
      <option value="10" selected>10</option>
      <option value="16">16</option>
    </select></td>
  <td style="text-align:center">
    <select name="basisTil" id="basisTil" onchange="this.form.basisFra.disabled=(this.value!='10')?true:false;">
      <option value="2">2</option>
      <option value="3">3</option>
      <option value="4">4</option>
      <option value="5">5</option>
      <option value="6">6</option>
      <option value="7">7</option>
      <option value="8">8</option>
      <option value="9">9</option>
      <option value="10" selected>10</option>
      <option value="16">16</option>
    </select></td>
</tr>
<tr>
  <td>Tal til konvertering:</td>
  <td><input id="talFra" name="talFra" type="text" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20"></td>
  <td><input id="talTil" name="talTil" type="text" disabled="disabled" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20"></td>
</table><br>
<button name="button2" id="button2" onclick="konverter(this.form);">Konverter</button>

</form>
</body>

</html>
Avatar billede roenving Novice
10. februar 2004 - 03:21 #7
Hov, jeg fandt da lige en ekstra fejl:

function konverter(f){
  if(f.basisFra.value=='10'){
    if(f.talFra.value=='0')return;
    var basis = +f.basisTil.value;
    var tal = +f.talFra.value, res="";
    while(tal>0){
      res = nums[tal%basis] + res;
      tal = Math.floor(tal/basis);
    }
    f.talTil.value = res;
  }else{
    if(f.talFra.value=='0')return;
    var basis = +f.basisFra.value;
    var tal = f.talFra.value, res = 0;
    for(i=0;tal.length>i;i++){
      res = res * basis + syms[tal.substr(i,1)];
    }
    f.talTil.value = res;
  }
}
Avatar billede eagleeye Praktikant
10. februar 2004 - 10:03 #8
Der er ikke umiddelbart en let metode at konvertere 10 tals systemt til og fra hex, octal eller binært. Det er let at konvertere imellem binært til hex og octal fordi deres base tal (hex base tal =16, octal base tal=8, decimalt base tal=10) passer med serien 2^x . Det betyder for et hex tal at hver ciffer svare til 4 bit i det binært tal. Så man kan let dele et langt binært tal op i bidder af 4: 1100|0111|0101B  =  B75h

Da man ikke direkte kan tage X 'antal bits og skrive et unik decimal tal må man summere hvert binært bit placerings værdi til decimal.
Binært tal : 110001110101
tal = 1*2^0+0*2^1+1*2^2+0*2^3+1*2^4+......+1*2^10+1*2^11 = 3189

Skal man fra 10 tal systemet til binært kan man regne sig frem ved at dividere med base tallet 2 for binært:

179 / 2 = 89  rest = 1 (LSB)
89 / 2 = 44 rest = 1
44 / 2 = 22 rest = 0
22 / 2 = 11 rest = 0
11 / 2 = 5 rest = 1
5 / 2 = 2 rest = 1
2 /2 = 1 rest = 0
1 / 2 = 0 rest = 1 (MSB)

179 = 10110011B

----

Når du skriver forklare subnetting er det så sådan noget:?
http://www.ko.sdu.dk/~pen/netmasker/ip-net.htmlx
http://www.svein.dk/Diverse/TCPIP/ip_subnetting_del%201.asp
Avatar billede eagleeye Praktikant
10. februar 2004 - 10:09 #9
Avatar billede athlon-pascal Juniormester
10. februar 2004 - 12:38 #10
Jeg har også, på det amatør-javascript-niveau jeg er på, forsøgt med lidt javascript :o)

De 2 øverste funktioner er til romertal <-> decimaltal og er baseret på noget Object Pascal-kode jeg har liggende. Den øverste er baseret på http://borrisholt.com/Faq/ShowSource.asp?id=34&Array=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, og nr. 2 har jeg selv skrevet :o)

De 2 nederste er til et talsystem <-> decimaltal, og virker på følgende måde (eksempler):
anyBaseToDec('FF', 16) == 255;
decToAnyBase(255, 16) == 255;

Altså:
anyBaseToDec(tal som talsystem, talsystem) == tal som decimaltal;
decToAnyBase(tal som decimaltal, talsystem) == tal som decimaltal;


function decToRoman(dec) {
    var i, result = "";
    romans = new Array("I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M");
    arabics = new Array(1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);
   
    for (i = romans.length - 1; i >= 0; i--)
        while (dec >= arabics[i]) {
            dec = dec - arabics[i];
            result += romans[i];
        }

    if (result.length == 0)
        return false;
       
    return result;
}

function romanToDec(romanNum) {
    var i, j, index, max = 0, result = 0;
    romans = new Array("I", "V", "X", "L", "C", "D", "M");
    arabics = new Array(1, 5, 10, 50, 100, 500, 1000);
    romanNum = romanNum.toUpperCase();
   
    for (i = romanNum.length - 1; i >= 0; i--) {
        index = -1;
       
        for (j = 0; j < romans.length; j++)
            if (romans[j] == romanNum.charAt(i)) {
                index = j;
                break;
            }
       
        if (index == -1)
            return false;

        if (arabics[index] >= max) {
            max = arabics[index];
            result += arabics[index];
        } else
            result -= arabics[index];
    }

    if (result == 0)
        return false;

    return result;
}

function anyBaseToDec(num, base) {
    var i, result = 0, minus = false;
    baseStr = "0123456789abcdefghijklmnopqrstuvwxyz";

    if (base < 2 || base > baseStr.length)
        return false;

    baseStr = baseStr.substr(0, base);

    if (num.length == 0)
        return false;

    num = num.toLowerCase();

    if (num.indexOf("-") == 0) {
        minus = true;
        num = num.substr(1, num.length - 1);
    }

    for (i = 0; i < num.length; i++) {
        if (baseStr.indexOf(num.charAt(i)) == -1)
            return false;

        result += baseStr.indexOf(num.charAt(i)) * Math.pow(base, num.length - i - 1);
    }

    if (minus)
        result = -result;

    return result;
}

function decToAnyBase(dec, base) {
    var i, result = "", minus = false;
    baseStr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    if (isNaN(dec))
        return false;

    if (base < 2 || base > baseStr.length)
        return false;

    baseStr = baseStr.substr(0, base);

    if (dec < 0) {
        minus = true;
        dec = -dec;
    }

    do {
        result = baseStr[dec % base] + result;
        dec = parseInt(dec / base);
    } while (dec > 0);
   
    if (result.length == 0)
        return false;

    if (minus)
        result = "-" + result;

    return result;
}
Avatar billede athlon-pascal Juniormester
10. februar 2004 - 12:38 #11
Hmm...
Det skulle ikke have været et svar...
Avatar billede eagleeye Praktikant
12. februar 2004 - 09:22 #12
Er man den heldige ejer af windows, følger der en lommeregner (calculator) med, som let kan konvertere imellem:  Binær, Hex, Octal og Decimal tal
Avatar billede bufferzone Praktikant
12. februar 2004 - 18:36 #13
Problemer er ikke så meget selve konverteringen, den kan jeg regne mig frem til, problemet er den pædagogiske forklaring, så man kan forklare andre hvordan det hænger sammen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Alle kurser indenfor Microsoft 365 – både til begyndere og øvede.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester