Avatar billede benneharli Juniormester
16. januar 2008 - 12:34 Der er 14 kommentarer og
1 løsning

decimal til binaer til decimal

Hey

Jeg skal bruge en funktion der gor folgende.

1: konvertere de decimale tal til 16 bit binaert tal
2: dele de binaere tal i 3 dele
3: konvertere hver af de binaere tal til decimal tal

Er det meget kringlet? Har kigget lidt paa noget, men kan ikke lige knaekke koden. Kan se at der er nogen der bruger pow (altsaa potens) men kan ikke lige gennemskue formlen, og saa har jeg ogsaa fundet noget hvor at tage dele at en str, men samlet overstiger det mine kompetencer - hilfe
Avatar billede darrich Novice
16. januar 2008 - 12:50 #1
Princippet er simpelt.
Eksempel:
2 cifre decimalt til 8 bit binær

decimaltal / dec værdi af mest betydende bit => hvis resultat >= 1 så sættes mest betydende bit og decimaltal minus dec værdi af mest betydende bit = mellemregning decimaltal

mellemregning decimaltal / dec værdi af næstmest betydende bit => hvis resultat = 1 så sættes mest betydende bit.

etc....

regneeksempel
44 decimal skal konverteres.

44 / 128 => mindre end en (bit = 0)

44 / 64 => mindre end en (bit = 0)

44 / 32 => større end en (bit = 1)
44 - 32 = 12

12 / 16 => mindre end en (bit = 0)

12 / 8 => større end en (bit = 1)
12 - 8 = 4

4 / 4 = 1 lig med en (bit = 1)
4 -4 = 0

0 / 2 => 0 (bit = 0)

0 / 1 => 0 (bit = 0)

Ergo 44 decimal blev til 00101100




Fra binær til decimal er simpel
(værdi bit 1 * decimal værdi)
+
(værdi bit 2 * decimal værdi)
+
(værdi bit 3 x decmial værdi)
etc.

regneeksempel
0101

1 * 1 = 1

0 * 2 = 0

1 * 4 = 4

0 * 8 = 0

1 + 0 + 4 + 0) = 5 decimal
Avatar billede benneharli Juniormester
16. januar 2008 - 13:12 #2
ok, saa langt raekker jeg dog... det var egentlig mere at faa skrevet det over i noget javascript kode med lokker og saadan
Avatar billede benneharli Juniormester
16. januar 2008 - 13:12 #3
du har heller ikke delingen af det 16 bit binaere tal med
Avatar billede Slettet bruger
16. januar 2008 - 13:34 #4
Når du skriver decimal-tal, men du så udelukkende heltal?

javascript understøtter bitwise operaters:

http://www.javascriptkit.com/jsref/operators.shtml

Med dem i hånden skulle det være en smal sag at lave en converter...
Avatar billede benneharli Juniormester
16. januar 2008 - 13:44 #5
heltal
Avatar billede Slettet bruger
16. januar 2008 - 14:26 #6
Der ser ud til at være en ganske nem måde:

http://www.hunlock.com/blogs/The_Complete_Javascript_Number_Reference#toString

Sørme om ikke man kan komme den anden vej med parseInt:

http://www.devguru.com/Technologies/ecmaScript/quickref/parseint.html

<html>
<body>
<script type="text/javascript">
var iBase = 2;
function intToBin(n) {
    return n.toString(iBase);
}

function binToInt(s) {
    return parseInt(s, iBase);
}
var iNum = 1234;
var sNum = intToBin(iNum);
document.write(sNum);
document.write("<br/>");
document.write(binToInt(sNum));
</script>
</body>
</html>

Du kan så benytte substring til at splitte bit-strengen op undervejs...
Avatar billede benneharli Juniormester
16. januar 2008 - 15:19 #7
ok. dvs.

<script type="text/javascript">

var num = x;

bin = num.toString(2);

her skal der ske et eller andet for at sikre at der er 16 karakterer
her skal der ske et eller andet hvor der deles i 3

int1 = bin1.toString();
int2 = bin2.toString();
int3 = bin3.toString();

document.write(int1);
document.write(int2);
document.write(int3);

</script>
Avatar billede benneharli Juniormester
16. januar 2008 - 15:20 #8
sorry

document.writeln(int1);
document.writeln(int2);
document.writeln(int3);
Avatar billede benneharli Juniormester
16. januar 2008 - 15:32 #9
jeg er naaet her til:

<html>
<body>
<script type="text/javascript">
var num = 650;

bin = num.toString(2);
binLength = bin.length;

document.writeln(bin);
document.writeln(binLength);
</script>
</body>
</html>

nu skal jeg bare have sat nuller paa foran indtil 16 karakterer og delt i 3 stykker
Avatar billede roenving Novice
17. januar 2008 - 01:40 #10
Avatar billede Slettet bruger
17. januar 2008 - 09:56 #11
@roenving: Lidt voldsomt når funktionaliteten er indbygget i Javascript? Men tjener som en meget god forklaring.

@benneharli: Mht. til at dele strengen i 3 stykker, så benyt substring:

http://www.hunlock.com/blogs/The_Complete_Javascript_Strings_Reference#substring

Når du skal appende 0'er kan du evt. have en konstant var = '0000000000000000'indeholdende 16 0'er. Check så længden af hver bit-del, og benyt f.eks. slice: http://www.hunlock.com/blogs/The_Complete_Javascript_Strings_Reference#slice
til at pille 16 - længden af bit delen 0'er fra. Dem tilføjer du til bitdelen.
Avatar billede benneharli Juniormester
18. januar 2008 - 02:48 #12
jeg er med på substring... i bund og grund gør slice vel egentligt det samme. Har brug for et eksempel på at fylde op til 16 bit...
Avatar billede Slettet bruger
18. januar 2008 - 07:28 #13
Ikke testet kode:

var sZeroes = '0000000000000000';
function appendZeroes(sNum) {
  return sZeroes.slice(sNum.length) + sNum;
}
Avatar billede benneharli Juniormester
18. januar 2008 - 12:42 #14
saa tror jeg den er der

smid et svar

-----------------------------------------------------------------------

var num = xxx;
var zeroes = '0000000000000000';

bin = num.toString(2);
binLength = bin.length;
fullBin = zeroes.slice(binLength) + bin;

//Type
bin1 = fullBin.substr(0,5);
//Condition
bin2 = fullBin.substr(6,3);
//Analogue value
bin3 = fullBin.substr(8,8);

int1 = parseInt(bin1,2);
int2 = parseInt(bin2,2);
int3 = parseInt(bin3,2);
Avatar billede Slettet bruger
18. januar 2008 - 13:35 #15
svar :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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