data = -2147483648;
This means "an expression that applies a unary − (minus) operator to 2147483648".
Therefore, the warning message is output because "2147483648" exceeds the range of signed int.
Taking this into consideration, limits.h sets as follows.
#define INT_MIN (-INT_MAX-1)
Use this macro name.
The above warning message is output because "-2147483648" is in the range of signed int and the possibility that
it is not assumed that sign extension (signed int -> unsigned int) takes place during an operation is high.
For example, the value changes in the following case.
signed int si;
si = -2147483648 >> 1; /* Positive number */
si = INT_MIN >> 1; /* Negative number */