Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

liczby binarne

11 Lut 2004 12:41 8789 16
  • Poziom 13  
    Witam

    Po przemnozeniu liczb 12345*2500 dostaje taki wynik 30862500 = 01D6ECA4, ale mnie nie intersuje cala ta liczba tylko jej czesc np 3086 jak ja skrocic (obiac bity) chodzi mi o asseblera na AVR.

    Za pomoc serdecznie dziekuje
  • Poziom 14  
    Musisz wynik podzielić przez 1000. Algorytmy dzielenia można znaleźć na stronie www.atmel.com w notach aplikacyjnych.
  • Poziom 13  
    Czy mozna to jakos zrobic bez dzielenia ?
    Bo ta liczba ktora otrzymalem jest 32 bit a jak podziele przez 1000 to przez 16 bitowa. Chce wlasnie to ominac. Moze da sie jakos to przesuwac.
  • Poziom 34  
    przesuwać możesz ale binarnie, dziesiętnie to raczej tylko dzielenie
    ewentualnie jak nie podobo Ci sie dzielenie przez 16 bitową możesz 2 razy przez 8 bitową ;)
  • Poziom 13  
    Dzielenie liczby przez 16 bitowa jak najbardziej mi pasuje, tylko ze nie 32 bitowej przez 16 bitowa. Dlatego szukam jakiejs metody zeby ta 32 bitowa skrocic do 16 bitowej. Bez dzielenia.
  • Poziom 14  
    Przesuwanie liczby oznacza mnożenie lub dzielenia (w zależności od kierunku przesuwania) przez 2. Poniewaź liczba 10 nie ma rozwinięcia binarnego, przesuwanie nie może być zastosowane. W każdym przypadku (dzielenia przez liczbę 16-bitową czy kilka dzieleń przez liczbę 8-bitową) wystąpi dzielenie. Procesor AVR nie ma istrukcji dzielenia więc należy wykonać to dostępnymi metodami.
    Nie ma innego wyjścia.
  • Poziom 14  
    Jeżeli w prawo o 4 bity (bo w kontekście instrukcji AND to nie ma sensu), to podziłeś przez 16.
  • Poziom 18  
    przesuwanie i dzielenie to to w gruncie rzeczy to samo. W systemie dwójkowym dzielenie przez 2 to przesuwanie, w dziesiętnym przez 10 to przesuwanie w ósemkowym przez 8 to przesuwanie itd. Jak masz problem z dzieleniem "dużych" liczb to nie zapominaj że dzielenie i mnożenie jest przemienne i czasami łatwiej to zrobić z argumentem np 8 bitowym niż potem z 16 bitowym wynikiem.
  • Poziom 13  
    Musze zrobic cos takiego :

    (x/y)*2500
    gdzie

    x - liczba 16 bitowa ktora bedzie sie zmieniac
    y - stala liczba FFFF (16 bit)

    i nie wiem jak to zrobic zeby obejsc dzielenie 32 bitowej liczby przez 16 bitowa. Bo jak np wykonam najpierw dzielenie x/y to bede mial liczbe przecinkowa a to chyba duzo gorzej.
  • Poziom 14  
    Tak jak napisałam wyżej. Nie masz wyjścia, dzielenie wystąpi ZAWSZE.
  • Poziom 34  
    a) a jak chcesz cokolwiek zrobić żeby pominąć przecinek
    b) jeśli odpowiesz że po wykonaniu obliczeń chcesz pominąć za przecinkiem to dlaczego nie dzielić przez 1000h, i do czego taka dokładność??
  • Poziom 13  
    To bedzie pomiar napiecia z ADC 12 bit.
    Tym dzieleniem i mnozeniem chce sobie ustawic zakrec pomiarowy np 0-2500mV= 2,500V Nie intersuje mnie czy tam bedzie 2500,11........1234mV ja chce tylko wiedziec ze tam jes albo 2499mV albo 2500 czy tam dalej beda jakies liczby to juz jest dla mnie nie wazne.
    Wartosc tego napiecia bedzie wykorzystywana do dalszych obliczen. Ale na koncu chce miec wynik tylko w postaci np 2,50.

    Moze jest jakis inny sposob zeby to wykonac ??
  • Poziom 14  
    jesli pracujesz nad avr'rem to prosto to mozesz zrobic w bascom avr poleconiem shift
  • Poziom 34  
    roiman napisał:
    jesli pracujesz nad avr'rem to prosto to mozesz zrobic w bascom avr poleconiem shift


    fajnie że chciałeś pomóc ale nie napisałeś jak polecenie shift dzieli przez FFFF??
    temat przesuwania został wyczerpany, zastanawiajmy się nad procedurką dzielenia lub innym sposobem ;)
  • Poziom 13  
    A jak mozna podzielic liczbe 12345/65536 = 0,18765.... mnie by tylko interesowlo np 0,187??
    Bo jak dam dzielenie binarne tych liczn to wyjdzie mi zero!!