C, int --> 2x char

Jan Waclawek konfera na efton.sk
Čtvrtek Květen 23 14:10:45 CEST 2013


>Kdyz jsme u tech chutovek, jak delate prenos z promenne typu unsigned, 
>ktera ovsem obsahuje hodnotu se znamenkem, do typu int?
>
>cili napr:
>unsigned u = 65535;
>int i;
>
>i = <neco> u;
>  aby v i bylo -1  ???

C99 6.3.1.3#3
[...] the result is implementation-defined or an implementation-defined
signal is raised.

Takze ak by to malo byt v akomkolvek prekladaci korektne, tak
(predpokladajuc int16_t a uint16_t namiesto int a unsigned):

if (u >= 32768) i = (int32_t)u - (int32_t)65536; else i = u;

inak sa staci pozriet v dokumentacii do zoznamu popisujuceho
implementation-defined (to je vyzadovane normou, aj ked sa na to u
niektorych prekladacov kasle), ze ako to konkretny prekladac robi.

U drvivej vacsiny prekladacov bude stacit proste priradenie; napr. gcc
http://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html#Integers-implementation
:
For conversion to a type of width N, the value is reduced modulo 2^N to be
within range of the type; no signal is raised. 


wek



Další informace o konferenci Hw-list