The range of values that fit into the various types is implementation dependent. The Standard requires each implementation to explicitly specify its integer ranges with the macros of header file
limits.h. (Floating point ranges are specified in float.h.)
The Standard mandates a certain minimum range for each data type, but each implementation is free to make the ranges larger. These minimum ranges are described at the limits.h link.
"We know that in 16bit compiler integer variable have 2bytes(16 bits).First MSB for sign and other 15bits for value"
Do not assume any particular encoding scheme. How negative numbers are encoded and whether there is a sign bit are implementation dependent. Your code will be nonportable if you try to make use of special knowledge like that.