eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingKonwersja kodu › Re: Konwersja kodu
  • X-Received: by 10.140.92.105 with SMTP id a96mr4384qge.20.1443284533812; Sat, 26 Sep
    2015 09:22:13 -0700 (PDT)
    X-Received: by 10.140.92.105 with SMTP id a96mr4384qge.20.1443284533812; Sat, 26 Sep
    2015 09:22:13 -0700 (PDT)
    Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask
    .pl!news.nask.org.pl!goblin3!goblin.stu.neva.ru!news.ripco.com!news.glorb.com!k
    q10no10894429igb.0!news-out.google.com!68ni27276qgg.0!nntp.google.com!v79no4858
    698qge.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Sat, 26 Sep 2015 09:22:13 -0700 (PDT)
    In-Reply-To: <1i91n3jkf2r8s$.us4fry1ns183$.dlg@40tude.net>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=178.36.206.163;
    posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
    NNTP-Posting-Host: 178.36.206.163
    References: <1i91n3jkf2r8s$.us4fry1ns183$.dlg@40tude.net>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <9...@g...com>
    Subject: Re: Konwersja kodu
    From: "M.M." <m...@g...com>
    Injection-Date: Sat, 26 Sep 2015 16:22:13 +0000
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:208410
    [ ukryj nagłówki ]

    On Saturday, September 26, 2015 at 5:27:32 PM UTC+2, szemrany wrote:
    > Hejka,
    >
    > Widzę, że niektórym się na grupie nudzi i próbują podkarmiać trolla, więc
    > może wykorzystam ten power w słusznym celu ;-)
    >
    > Mianowicie niejaki AK mnie porzucił z pomocą w konwersji kodu z C do
    > Pascala i potrzebuję pomocy.
    > Już prawie wszystko mam przetłumaczone, ale jeszcze pojawiają się
    > wątpliwości. Oto one.
    >
    > ret->allocated = (size / wordbitsize + 1);
    >
    > gdzie allocated to int
    >
    > Czy w C przypisanie wyniku dzielenia konwertuje/obcina go do typu
    > całkowitego?
    Pogooglaj za konwersją i promocją typów.
    http://mikrokontrolery.blogspot.com/2011/02/kurs-jez
    yka-c-rzutowanie-promocja-typow.html


    >
    > Kolejna rzecz.
    >
    > if (trailing_bits) {}
    >
    > gdzie trailing_bits to char
    >
    > Czy char jest odpowiednikiem typu byte z pascala?

    O ile pamiętam, to w C była gwarancja tylko co do tego:
    sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long).

    Może gdzieś na jakiejś platformie przy jakiś opcjach char
    ma 10 bitów, moze gdzieś 16.

    Jeśli ilość bitów i bajtów w typach jest ważne, to najlepiej
    je przedefiniować w jakimś miejscu. Nastepnie na starcie
    programu:

    if( sizeof(moj_char) <= 2 ) {
    printf("ten program zadziała tylko na znakach 2bajtowych");
    abort();
    }




    > Czy takie sprawdzanie warunku to sprawdzenie czy trailing_bits <> 0?
    Tak.



    > I następna.
    >
    > x = (word_t) ~0;
    >
    > gdzie word_t to uint64
    >
    > Czy to jest równoważne zapisowi:
    >
    > x = max_uint64;
    Zależy czym jest to zero bez sufixów.
    Ja bym napisał , że:
    x = ~0ULL;
    jest równe
    x = max_uint64;


    > czyli zapalone wszystkie 64 bity?


    > Kolejny niejasny moment:
    >
    > ret->trailing_bits = *(ret->bitset + ret->allocated - 1) ? (word_t) ~0 : 0;
    Faktycznie niejasny moment. Nie lepiej unikać takich sytuacji?
    Dlaczego nie sprawdzisz jak Twój kompilator na Twojej platformie z Twoim
    opcjami się zachowa?

    Na pewno
    typ_calkowity x = 0;
    wyzeruje wszystkie bity

    Ustawia się wszystkie bity tak:
    typ_dodatni x = ~((typ_dodatni)0);

    Wyrażenie
    ~0
    jest równe -1. Co się stanie gdy wartość ujemną się przypisze do
    typu dodatniego? Odpowiadam pytaniem, po co coś takiego robić?
    Chcesz wiedzieć jak się zachowa kompilator, a czy w ogóle można
    sensownie się zachować, gdy ktoś każe trzymać wartość ujemną w
    typie bez znaku?

    I odwrotnie:
    ~0u
    to max_uint.
    Przypisywanie max_uint do inta to przekroczenie zakresu. Znowu moje
    pytanie, po co coś takiego robić? Nie lepiej napisać kod tak, aby z
    niego wynikały intencje programisty? Np.:
    int x = -1;

    Mieszanie operacji arytmetycznych ze znakiem z operacjami bitowymi to
    proszenie się o kłopoty. Wiem, można uzyskać szybszy kod. Można nawet w
    typie double ustawiać i zerować bity. Ale



    >
    > Co ta linia przypisuje do trailing_bits?
    >
    > I definicje, żeby było łatwiej:
    >
    > ret to IntBitSet
    >
    > typedef unsigned long long int word_t;
    >
    > typedef struct {
    > int size;
    > int allocated;
    > word_t trailing_bits;
    > int tot;
    > word_t *bitset;
    > IntBitSet;
    >
    > Dziękuję :-)

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: