eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingKonwersja kodu › Re: Konwersja kodu
  • Data: 2015-09-26 19:56:49
    Temat: Re: Konwersja kodu
    Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie 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: