Posted By: Quasimodo (Quasimodo) on 'CZprogram'
Title: Re: Proc se zmeni hodnota v u.i?
Date: Sat Jan 11 21:57:57 2003
> int main(int argc, char **argv)
> {
> union {
> int i;
> char c[sizeof(int)];
> } u;
>
> u.i = 0;
> u.c[0] = 1;
> puts(u.i == 1 ? "little endian" : "big endian");
>
> return 0;
> }
>
> de to zkompilvat, samozrejmne az tady na ten radek...
> a tenhle a signaturu...
>
>
> Nehodlam vysvetlovat a ...
> ... Sipu si popel na *hlavu*
>
Tak ted jsem zmatenej, nevim na co se ptas. Nebo jestli je to odpoved na neco
z nedavne doby bez re...?
Nicmene pokud ten dotaz je v nadpise a skutecne nevis, co je union a proc se
meni u.i, zkusim vysvetlit:
Union je tu prave od toho, aby se dve nebo vice ruznych veci dalo napsat na
totez misto v pameti - bud aby nezabiraly misto, nebo abys mohl zkoumat treba
prave bytovou reprezentaci jak tu prevadis.
Typicky na IA32 budes mit int 4bytovy, char je jednobajt. Ty si zadefinujes
union u od nejake adresy - rekneme pro jednoduchost 0x00. Zapises do toho
(int)0, coz je 00 00 00 00.
Cely union ted obsahuje v pameti 0x00 : 00 00 00 00
Do u.c[0] zapises jednicku. Takze v pameti ted mas 0x00: 01 00 00 00
Pokud to byl little endian, tak u.i je ted 1. Pokud big endian, tak mas v u.i
cislo 2^24.
Velikost unionu je dana velikosti nejvetsiho jejiho prvku a vsechny prvky jsou
v pameti ulozeny od stejne pocatecni adresy.
-
Clovek je nejpomalejsi zname zarizeni typu I/O.
Quasimodo