Skocz do zawartości

Bity na bajty


Easeful

Rekomendowane odpowiedzi

Jeżeli tak to to szło chyba tak (od końca robię jakby coś): 0*2^0+0*2^1+1*2^2+1*2^3+1*2^4+0*2^5+1*2^6+0*2^7= 0+0+4+8+16+0+64+0=92 (w systemie dziesiętnym )

Może dodam że są też inne systemy ,np. szesnastkowy, czwórkowy, każdy może sobie wymyśleć jakiś i w nim coś liczyć :P

Odnośnik do komentarza
Udostępnij na innych stronach

GML
var bites,len,ret,cbt;

bites=argument0;

len=string_length(bites);

ret=0;

cbt=0;

 

for(i=len; i>=1; i-=1)

{

cbt=string_char_at(bites,i);

cbt=real(cbt);

ret+=power((cbt*2),len-i);

}

 

return ret;

 

Takie coś zrobiłem, ale źle działa ;f

 

 

Edit: Zmieniłem z ^ na power, teraz np jak dam 1000 to zwróci 9 zamiast 8, tak samo z 100 - zamiast 4 to 5, ale z kolei jak dam 101 to zwróci 5, lub gdy dam 1 to zwórci 1

Odnośnik do komentarza
Udostępnij na innych stronach

jak łatwo zauważyć jak zamieniasz liczbę z 2 na dziesiętny to jak na pierwszym od prawej bicie jest 1 to jest liczba nieparzysta a jak 0 to parzysta, tu szukaj błędu...

 

Edit 1. może pobaw się w komputer podawaj różne dane wejściowe i po kolei wykonuj swój algorytm...

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Nikt tego wciąż nie wytłumaczył dobrze, zatem od prawej idąc (najmłodszy bit) masz kolejne potęgi liczby 2: 2^0, 2^1, 2^2 itd. (czyli 1,2,4,8,16...) i dodajesz taką liczbę jak jest 1, nie dodajesz jak czytasz zero. Zatem 0001 to jest 0+0+0+1, a 1111 to 8+4+2+1= 15 :)

 

Tak samo działa system trójkowy, czwórkowy, ósemkowy, szesnastkowy czy nawet trzydziestkowy, najmłodszy bit to podstawa danego systemu do potęgi 0, potem do pierwszej, drugiej itd.

 

Edit: Snake, a tam nie brakuje real() po OR ?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ah, faktycznie... nie wiem dla czego ubzdurałem sobie, że to zamienia z systemu dziesiętnego a nie na dziesiętny :P Dzisiaj dawałem korepetycje z assemblera koleżance i chyba ciągle tkwię w tamtym temacie (drukowanie jako HEX zawartości AX)... wszystko się zgadza.

Odnośnik do komentarza
Udostępnij na innych stronach

Kod Snake wychodzi na to, że będzie działał. Ale:

Nikt tego wciąż nie wytłumaczył dobrze, zatem

...zatem ja jeszcze muszę się wtrącić. gnysek dobrze wytłumaczył działanie systemu dwójkowego, ale nie wspomniał o zapisie liczb ujemnych :)

Wszystko jest cacy poza tym, ze w U2 pierwszy bit to nie jest 2^n tylko -2^n.

Więc na przykład:

 

0101 = (0*-(2^3)) + (1*(2^2)) + (0*(2^1)) + (1*(2^0)) = 0*(-8) + 1*4 + 0*2 + 1*1 = 4+1 = 5

 

1101 = (1*-(2^3)) + (1*(2^2)) + (0*(2^1)) + (1*(2^0)) = 1*(-8) + 1*4 + 0*2 + 1*1 = -8+4+1 = -3

Odnośnik do komentarza
Udostępnij na innych stronach

Panie, co w tym trudnego? Przecież w dziesiętnym jest tak samo tyle, że podstawa to 10 :P

 

5613 = 5*1000 + 6*100 + 1*10 + 3*1

Widzimy, że są tu kolejne potęgi 10.

10^0 = 1

10^1 = 10

10^2 = 100

10^3 = 1000

 

W dziesiętnym kolejne bity maja takie wagi.

W binarnym koleje bity mają wagi 1,2,4,8,16,32,64. Czyli kolejne potęgi dwójki. Jest to spowodowane tym, że dodanie nowego bita sprawia, że mamy 2 razy więcej możliwych kombinacji. (bo nowy bit może być równy 0 lub 1)

 

System binarny powinieneś już czaić. Teraz z tym U2 to jest tak, że pierwszy bit z lewej się różni, bo zamiast mieć wagę 2^n to ma -2^n i on określa czy liczba jest dodatnia czy ujemna.

 

0101 = 0*(-8) + 1*(4) + 0*(2) + 1*(1) = 4+1 = 5

1101 = 1*(-8) + 1*(4) + 0*(2) + 1*(1) = -8+4+1 = -3

 

Swoja drogą muszę przeczytać jak reprezentowane są liczby zmiennoprzecinkowe, bo w sumie nie mam pojęcia. Miały chyba jakieś dodatkowe bity określające wartość po przecinku.

Odnośnik do komentarza
Udostępnij na innych stronach

Zrobiłem taki skrypt dawno temu:

GML
//Zwraca liczbe binarna argument0 w systemie dziesietnym.

var l,g,p,q;

l = string(argument0)

g = 0

p = 0

q = 1

repeat(string_length(l))

{

p = real(string_char_at(l,string_length(l)-q+1))

p = p*power(2,q-1)

g += p

q += 1

p = 0

}

return g

 

E: ooo, nie zauważyłem, że już jest rozwiązanie...

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...