auto x = -2147483648; // (unsigned long)
auto y = -2147483647; // (int)
In C language, the range of int type is "-2,147,483,648 ~ 2,147,483,647".
I think -2147483648 can be represented as an int type but represented as an unsigned long. Furthermore -2147483648 is out of range of the unsigned long type.
Why...?
(I'm using Visual Studio 2017)
Edited!
Wow. I read comments and I realized that my question should have been more precise.
1) Yes, In C++ language not in C language. (sorry)
2) int type range? : https://msdn.microsoft.com/en-us/library/s3f49ktz.aspx
INT_MIN is define in limits.h
//
// limits.h
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// The C Standard Library <limits.h> header.
//
#define SHRT_MIN (-32768) // minimum (signed) short value
#define SHRT_MAX 32767 // maximum (signed) short value
#define USHRT_MAX 0xffff // maximum unsigned short value
#define INT_MIN (-2147483647 - 1) // minimum (signed) int value
#define INT_MAX 2147483647 // maximum (signed) int value
#define UINT_MAX 0xffffffff // maximum unsigned int value
#define LONG_MIN (-2147483647L - 1) // minimum (signed) long value
#define LONG_MAX 2147483647L // maximum (signed) long value
#define ULONG_MAX 0xffffffffUL // maximum unsigned long value
#define LLONG_MAX 9223372036854775807i64 // maximum signed long long int value
#define LLONG_MIN (-9223372036854775807i64 - 1) // minimum signed long long int value
#define ULLONG_MAX 0xffffffffffffffffui64 // maximum unsigned long long int value