eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaPoczątek zabawy z bascomemRe: Początek zabawy z bascomem
  • Data: 2011-02-08 21:41:36
    Temat: Re: Początek zabawy z bascomem
    Od: Michoo <m...@v...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 08.02.2011 22:25, janusz_kk1 pisze:
    > Dnia 08-02-2011 o 21:53:16 Michoo <m...@v...pl> napisał(a):
    >
    >> W dniu 08.02.2011 21:27, janusz_kk1 pisze:
    >>> Dnia 08-02-2011 o 20:10:26 Lelek@ <n...@n...pl> napisał(a):
    >>>> Ale co jest w C takiego trudnego? Przecież to jest intuicyjny język.
    >>> Jasneeee :)
    >>> Tak na szybko ci znalazłem:
    >>> c_size_mul = ((MMC_Data_16[9] & 0x03) * 2) + ((MMC_Data_16[10] >> 7) &
    >>> 0x01);
    >>> powiesz mi zgłowy co się w jakiej kolejności robi?
    >> Co robi widać na pierwszy rzut oka. Kolejność jest nieistotna i może
    >> się zmienić.
    >
    >>
    >>> N o ile ci to zajęło?
    >> Z 1.5 .. 2 sec?
    > No to co najmniej o 1,5sek za długo, pomyśl teraz że takich linijek masz
    > wiecej, tracisz dużo czasu na analizę, przy prostym kodzie analizujesz
    > kilkakrotnie szybciej.
    Składanie wartości binarnej leżącej w dziwnym miejscu nie jest "proste"
    samo w sobie.

    Przy "prostym" kodzie zapisanym równie nieintuicyjnie byłoby gorzej -
    trzeba by przeanalizować kilka linii, pojąć ich sens a potem pojąć sens
    całości. No chyba, że dasz przykład takiego "prostego" kodu?

    >> Chociaż dłuższa analiza pozwala się oczywiście zastanawiać czy *2 nie
    >> powinno być dla konsekwencji zapisane jako przesunięcie binarne
    > Kompilator i tak to zoptymalizuje.
    Ale tu chodzi o zapis a nie o optymalizację.
    Kod zajmuje się złożeniem wartości z bitów leżących "na przełomie"
    bajtu. Operuje na poziomie bitów więc | jest znacznie bardziej
    intuicyjny niż +, który sugeruje operację matematyczną a nie logiczną.
    Tak samo wartość ma być _przesunięta o jeden bit_ względem początkowej a
    nie _dwa razy większa_.

    c_size_mul = ((MMC_Data_16[9] << 1) & 0b110) | (MMC_Data_16[10] >> 7) &
    0b001);

    --
    Pozdrawiam
    Michoo

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: