16 bit map returns negative values

I read 16 bit from an ADC. (unsigned int and long with the same result)

I want to map those values from 0,000 to 50,000

when I use unsigned int or long I do not get fractions

When I use float I get -values if the MSB = 1

how to map 16 bit into +values only?

unsigned long readADC[3]; // Temperatur value of each channel 16 bit
float CelsiusT; // this version returns -Degrees
float Celsius;

void loop(){

CelsiusT = map(readADC[ADC_run],0,0xFFFF,0,50000);

Celsius = CelsiusT/1000;
Serial.print(" ADC channel :");
Serial.print(" Grad: ");


Hey ! Thank you very much!! It works just fine