C - Ako funguje konverzia cisel?

Jan Waclawek konfera na efton.sk
Středa Červenec 5 10:24:31 CEST 2023


C99 6.3.1.3 #1 
When a value with integer type is converted to another integer type other
than _Bool, if
the value can be represented by the new type, it is unchanged.

Toto je Tvoj pripad, ak si si teda isty ze napatie je 0..5000, tak to sa da
reprezentovat presne tak isto v signed int.

Pri cislach vacsich ako 32767 plati #3
Otherwise, the new type is signed and the value cannot be represented in
it; either the
result is implementation-defined or an implementation-defined signal is
raised.

(#2 sa zaobera pripadom konverzie na unsigned, t.j. opacne nez u Teba).
Implementation-defined znamena, ze v navode k Tvojmu prekladacu si najdes,
ako to presne funguje pre ten konkretny prekladac. S najvacsou
pravdepodobnostou tam najdes to, co ocakavas, t.j. ze sa najvyssi bit
interpretuje ako znamienko.

Aby som to skratil, ak vstupne hodnoty do tejto funkcie su 0..5000, tak
problem nie je v tejto funkcii.

wek


----- Original Message ---------------

Subject: Re: C - Ako funguje konverzia cisel?
   From: Jan Waclawek <konfera na efton.sk>
   Date: Wed, 5 Jul 2023 10:13:34 +0200
     To: hw-list na list.hw.cz

[preposielam]

Ahojte,

mam v programe nasledujucu funkciu:

signed int MCP9700_Get_Temperature(unsigned int Voltage) {

    // unsigned int ADC_Voltage = 100...1750mV
    // signed int Temperature = (signed int)ADC_Voltage - 500mV
    return((signed int)Voltage - 500);
}

Chcel by som sa spytat, ako funguje konverzia premennej typu unsigned int
na premennu typu signed int? Otazka je, ci pridat pred tu konverziu este
kontrolu rozsahu vstupnej premennej unsigned int. Nasledujuca funkcia
mi totiz obcas hlasi chybu rozsahu pri zobrazovani premennej signed int.
Tak hladam chybu, ktora mi to sposobuje.

Pri tych konverziach unsigned int na signed int, je unsigned int maximalne
v rozsahu 0..2500 resp. 0..5000, takze znamienkovy bit je vo vsetkych
pripadoch vynulovany a konverzia by mala prebehnut normalne. Problem by
mohol nastatat pri cislach vacsich ako 32767, ked sa uz nastavi znamienkovy
bit na 1 a vysledok konverzie je zaporne cislo, co je v mojom pripade
chyba. Je tato moja domienka spravna?

Velmi pekne dakujem za odpovede.

A.

_______________________________________________
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