[OT]C CO tim chtel basnik rici?
Stano
stano.hw na gmail.com
Středa Prosinec 31 20:57:16 CET 2014
Vysledok bol 0xFFFFFFFF aj ked sa rotovalo 0xFFFFFFFFU a pocet bitov bol
v premenej
Ak bol pocet bitov konstanta, vysledok bol vzdy nula.
A co sa normy tyka nasiel som len toto:
The result of E1 >> E2 is E1 right-shifted E2 bit positions. If E1 has
an unsigned type
or if E1 has a signed type and a nonnegative value, the value of the
result is the integral
part of the quotient of E1 /2E2.If E1 has a signed type and a negative
value, the
resulting value is implementation-defined.
Rotacia signed nieje difinovana, ok, beriem, ale problem nastaval resp
bol obiaveny na rotacii uint32_t premennej.
Len vramci ziednodusenia som ju nahradil konstantou (ano to explicitne
pretypovanie tam chyba)
Kazdopadne aj s konstantou ci uz unsigned alebo signed alebo s premennou
sa to spravalo rovnao.
Dokonca aj pre (usint64_t)0xFFFFFFFF << addr_rem bol vysledok stale
rovny 0xFFFFFFFF a toto je uz myslim naozaj porusenie normy.
Jaroslav Buchta wrote / napísal(a):
> Jestli nebude na vine nejaka option prekladace, ze se provadi
> implicitne posun aritmeeticky nebo logicky...
> Ten muj pokus dal 0 v obou pripadech a int je 32b - cili evidentne
> provadi posun logicky.
> Kazdopadne tyhle chytaky asi zaslouzi v C-cku nebyt liny napsat
> 0xFFFFFFFFU a je to jasne.
>
> Dne 31. 12. 2014 v 19:07 František Burian napsal(a):
>> "přičemž se doplňuje nulami" je právě ta chyba. Pokud 0xFFFFFFFF je
>> int pak je signed a posunuje se znamenko takže by měl být výsledek
>> -1. pokud bude uint měl by být 0 v obou případech.
>>
>> ---------- Původní zpráva ----------
>> Od: Pavel Hudeček <edizon na seznam.cz>
>> Komu: HW-news <hw-list na list.hw.cz>
>> Datum: 31. 12. 2014 18:45:59
>> Předmět: Re: [OT]C CO tim chtel basnik rici?
>>
>>
>> To je nějaký divný. Zadání je jasné:
>>
>> Vzít 32b int plný jedniček a 32x posunout, přičemž se doplňuje
>> nulami.
>>
>> - Proč by se to mělo přeložit jinak, než pro posun o 1, 2, 17,
>> nebo třeba 35 bitů?
>> - Proč by mělo (není-li chyba v překladači) vycházet něco jiného
>> než 0?
>>
>> PH
>>
>> Od: Jan Waclawek
>> To zavisi od velkosti int. Ak je viac ako 32 bitov, oba pripady
>> su ekvivalentne, ak menej alebo rovne, obidva su nedefinovane,
>> takze prekladac ma plne pravo vygenerovat lubovolny kod, ktory
>> moze trebars aj spadnut. Rad by som, ale nemam teraz moznost
>> citovat z normy.
>>
>> Akurat ze gcc sa bude v prvom pripade snazit vygenerovat nejaky
>> kod, co moze dopadnut vselijako v zavoslosti od konkretneho
>> procesora; v druhom tam asi da v ramci jednoduchosti asi
>> 0xFFFFFFFF, t.j. akoby shift ani nenastal; ale moze to byt
>> lubovolne inak.
>>
>> >>>
>> Na C alebo skor gcc mam tazke srdce koli inym "vlastnostiam"
>> Len tak schvalne aky vysledok bude podla vas v tychto prikladoch:
>>
>> uint32_t addr_rem, mask;
>> addr_rem = 32;
>> mask = 0xFFFFFFFF >> addr_rem;
>>
>> A aky v pripade:
>>
>> mask = 0xFFFFFFFF >> 32;
>> _______________________________________________
>> HW-list mailing list - sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>>
>>
>> _______________________________________________
>> HW-list mailing list - sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>
>
>
> ------------------------------------------------------------------------
> <http://www.avast.com/>
>
> This email has been checked for viruses by Avast antivirus software.
> www.avast.com <http://www.avast.com/>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
Další informace o konferenci Hw-list