Něco jen vážně pro fajšmekry

johnys

Re:Něco jen vážně pro fajšmekry
« Odpověď #15 kdy: 27. 11. 2015, 00:15:46 »
Pokial to potrebujes v c/c++ idealne by bolo pouzit union:

Kód: [Vybrat]
union tuple_union{
    struct {
        __int16_t idx;
        __int16_t val;
    } as_tuple;
    __int32_t as_single_number;
};

mozes potom k rovnakym datam pristupovat pohodlne ako k dvojici 16 bitovych intov a zaroven jednemu 32 bitovemu intu...


Pavel Tisnovsky

Re:Něco jen vážně pro fajšmekry
« Odpověď #16 kdy: 27. 11. 2015, 00:17:31 »
Zle počítám, už to funguje ;-) Neuvěřitelné, může nastat nějaká krpa ? V prvním příkladu jsi použil násobek 10001 místo 10000, proč ?

Protože jsem počítal s max. hodnotou indexu 10000

V Tvém případě máš maximální hodnotu indexu 99, takže se použije konstanta o jedničku větší (jde o to, že i když použiješ max.index, nesmí dojít ke zvětšení hodnoty vynásobené o tu stovku).

adsafsdf

Re:Něco jen vážně pro fajšmekry
« Odpověď #17 kdy: 27. 11. 2015, 01:20:25 »
Pokial to potrebujes v c/c++ idealne by bolo pouzit union:

Kód: [Vybrat]
union tuple_union{
    struct {
        __int16_t idx;
        __int16_t val;
    } as_tuple;
    __int32_t as_single_number;
};

mozes potom k rovnakym datam pristupovat pohodlne ako k dvojici 16 bitovych intov a zaroven jednemu 32 bitovemu intu...
Nie pohodlne. Endian, takze ani na 100% nevies, ci je idx prvy alebo druhy a ci nema prehodene byty.

k

Re:Něco jen vážně pro fajšmekry
« Odpověď #18 kdy: 27. 11. 2015, 08:28:55 »
Druhá možnost byla myšlena tak, když neznáš rozsahy. Potom se může například obě vstupní čísla mohou převést do
binární podoby a jednotlivé bity smíchat do výsledku stylem sudý bit - bit z indexu, lichý bit - bit z druhé hodnoty.

Nefunguje pro signed integer. Unsigned integer funguje.

Nie pohodlne. Endian, takze ani na 100% nevies, ci je idx prvy alebo druhy a ci nema prehodene byty.

Bude to fungovat za přirozeného předpokladu že big-endian slepé evoluční větve nesmí přes práh :)

johnys

Re:Něco jen vážně pro fajšmekry
« Odpověď #19 kdy: 27. 11. 2015, 17:17:25 »
Pokial to potrebujes v c/c++ idealne by bolo pouzit union:

Kód: [Vybrat]
union tuple_union{
    struct {
        __int16_t idx;
        __int16_t val;
    } as_tuple;
    __int32_t as_single_number;
};

mozes potom k rovnakym datam pristupovat pohodlne ako k dvojici 16 bitovych intov a zaroven jednemu 32 bitovemu intu...
Nie pohodlne. Endian, takze ani na 100% nevies, ci je idx prvy alebo druhy a ci nema prehodene byty.
Nevidim problem preco by si to nemohol pouzit na little aj big endian systemoch - jediny problem by bol samozrejme pokial by si tie data prenasal medzi systemami s roznou endianitou.


j

Re:Něco jen vážně pro fajšmekry
« Odpověď #20 kdy: 27. 11. 2015, 18:00:18 »
Mnohem jistejsi a vic koser bude, pokud to deklarujes jako skupinu bytu. Pak je to jedno, protoze "indiana" zaskrtis vlastnorucne ;D.