the normalization proposed by Alessandrois the best way to exploit the image dynamic range.
In alternative, assume xmin = 0 and xmax = 16000 if you want the same scaling of reflectance for all processed images: Reflectance would be scaled 1:16000.
In first place, I would like to stress that the reflectance should not be out of the ]0, 1[ range. Negative value are likely to be due to over-correction (maybe wrong estimate of the atmospheric conditions). Rescaling with min/max returns values in the correct range, but does not solve the ill-conditioned models. That may be acceptable if you have only 1 image (1 date), covering a reasonably small (i.e. homogeneous) area.
If you still want to encode the image, choose one of the following:
- encoding on a signed integer, like int16 (2 bytes), allowing you to represent negative and positive values from -32,768 to +32,767
- you absolutely need to have unsigned integer, uint16: you need 2 parameters to encode the reflectance: r_int = int ( (r_real + 0.1)* 10000)