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

Search the boards