eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingKonwersja koduRe: Konwersja kodu
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Konwersja kodu
    Date: Sat, 26 Sep 2015 19:56:49 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 127
    Message-ID: <mu6m91$s81$1@node2.news.atman.pl>
    References: <1i91n3jkf2r8s$.us4fry1ns183$.dlg@40tude.net>
    <mu6ib9$oja$1@node2.news.atman.pl>
    NNTP-Posting-Host: 89-73-81-145.dynamic.chello.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node2.news.atman.pl 1443290209 28929 89.73.81.145 (26 Sep 2015 17:56:49 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sat, 26 Sep 2015 17:56:49 +0000 (UTC)
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
    Thunderbird/38.2.0
    In-Reply-To: <mu6ib9$oja$1@node2.news.atman.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:208418
    [ ukryj nagłówki ]

    On 26.09.2015 18:49, bartekltg wrote:
    > On 26.09.2015 17:27, szemrany wrote:
    >> Hejka,
    >>
    >> Widzę, że niektórym się na grupie nudzi i próbują podkarmiać trolla, więc
    >
    > Przyłączyłbyś się do wspólnego wysiłku a nie tak tylko korzystasz;>
    >
    >> 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?
    >
    > Tak. Bardzo łatwo sprawdziłbyś to w google;>
    >
    >
    >> Kolejna rzecz.
    >>
    >> if (trailing_bits) {}
    >>
    >> gdzie trailing_bits to char
    >
    >
    >> Czy char jest odpowiednikiem typu byte z pascala?
    >
    > char ma 256 różnych wartośći, ale lepiej użyć unsigned char
    > albo uint8_t (z <cstdint>)
    >
    >> Czy takie sprawdzanie warunku to sprawdzenie czy trailing_bits <> 0?
    >
    > w C i C++ if(x) to to samo co if(x!=0)
    >
    >
    >> I następna.
    >>
    >> x = (word_t) ~0;
    >
    >> gdzie word_t to uint64
    >
    > Nie ma czegoś takiego. Jest uint64_t.
    >
    >
    >> Czy to jest równoważne zapisowi:
    >>
    >> x = max_uint64;
    >
    > Tak. Ale umiesz odpowiedzieć, dlaczego 0, które jest intem ze znakim
    > promuje się do _szerszego_ inta bez znaku, a dopiero potem jest negowane
    > bitowo? Jest na to werset w standardzie, czy to zależy od kompilatora?
    > ;-)
    >
    >
    > Zależnie od kontekstu, pewnie lepiej:
    > #include <limits>
    > ...
    > x = numeric_limits<uint64_t>::max();
    > lub
    > numeric_limits<decltype(res)>::max(); //wtedy jak zmienisz typ x
    > wartość też sie zmieni.
    >
    >> Kolejny niejasny moment:
    >>
    >> ret->trailing_bits = *(ret->bitset + ret->allocated - 1) ? (word_t) ~0
    >> : 0;
    >
    >> Co ta linia przypisuje do trailing_bits?
    >
    > Ta linia reprezentuje brzydkie hackerstwo;)
    >
    >> 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;
    >
    > Nie zjadłeś tu klamerki?
    >
    >> IntBitSet;
    >>
    >> Dziękuję :-)
    >
    >
    > ret->trailing_bits =
    > (ret->bitset[ret->allocated - 1] !=0 ) ? (word_t) ~0 : 0;
    >
    > Teraz jasne? bitset to wskaźnik na dynamicznie zaalokowaną tablicę
    > (domyślam się z kontekstu), allocated to dligość zaalokowanej tablicy,
    > ret->bitset + ret->allocated - 1 to wskaźnik na ostatni elemnt tablicy.
    > * to dereferencja. Więc to to samo co
    > ret->bitset[ret->allocated - 1]
    >
    >
    > Jeśli ostatni element zaalokowanej pamieci (a właśnie, czemu patrzymy
    > na allocated, nie size?) jest niezerowy, trailbits wypełniamy jedynkami,
    > w przeciwmy razie zerem.

    Skoro to z c->delphi, to jeszcze trzaba dodać, że
    x=(warunek)? coś : coś2

    to to samo co:

    if (warunek)
    x=cos;
    else
    x=coś2;

    pzdr
    bartekltg


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: