Easeful Opublikowano 17 Lutego 2010 Udostępnij Opublikowano 17 Lutego 2010 Jaki jest wzór na to, żeby wyliczyć, jaki bajt kryje w sobie np. 01011100 ?? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
en_6280 Opublikowano 17 Lutego 2010 Udostępnij Opublikowano 17 Lutego 2010 chodzi tobie o zapis 01011100 w systemie dziesiętnym?? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Easeful Opublikowano 17 Lutego 2010 Autor Udostępnij Opublikowano 17 Lutego 2010 tak. chodzi mi o konwersje binarnego do dziesiętnego czy jakos tak Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
en_6280 Opublikowano 17 Lutego 2010 Udostępnij Opublikowano 17 Lutego 2010 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 Więcej opcji udostępniania...
Easeful Opublikowano 17 Lutego 2010 Autor Udostępnij Opublikowano 17 Lutego 2010 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 Więcej opcji udostępniania...
en_6280 Opublikowano 17 Lutego 2010 Udostępnij Opublikowano 17 Lutego 2010 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 Więcej opcji udostępniania...
Snake Opublikowano 17 Lutego 2010 Udostępnij Opublikowano 17 Lutego 2010 GML var length, result; length = string_length( argument0 ); result = 0; for ( i = 0; i < length; i += 1 ) result |= ( string_char_at( argument0, length - i ) != "0" ) << i; return result; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 17 Lutego 2010 Administratorzy Udostępnij Opublikowano 17 Lutego 2010 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 Więcej opcji udostępniania...
Snake Opublikowano 17 Lutego 2010 Udostępnij Opublikowano 17 Lutego 2010 Nope, "( string_char_at( argument0, length - i ) != "0" )" to warunek - zwróci 1 (true) jeśli znak będzie inny niż "0", w innym przypadku 0 (false). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 17 Lutego 2010 Administratorzy Udostępnij Opublikowano 17 Lutego 2010 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 Więcej opcji udostępniania...
Platyna Opublikowano 18 Lutego 2010 Udostępnij Opublikowano 18 Lutego 2010 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 Więcej opcji udostępniania...
Easeful Opublikowano 18 Lutego 2010 Autor Udostępnij Opublikowano 18 Lutego 2010 chyba jestem na pojęcie tego za młody, ale cóż.. narazie skorzystam z gotowego konwertera Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 18 Lutego 2010 Udostępnij Opublikowano 18 Lutego 2010 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 Więcej opcji udostępniania...
en_6280 Opublikowano 18 Lutego 2010 Udostępnij Opublikowano 18 Lutego 2010 Platyna chodzi Tobie o np. 101010,10101 ?? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 18 Lutego 2010 Udostępnij Opublikowano 18 Lutego 2010 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę