【发布时间】:2012-10-18 14:54:47
【问题描述】:
C99 标准以下列方式定义数据类型的范围:
— minimum value for an object of type signed char
SCHAR_MIN -127 // −(2^7 − 1)
— maximum value for an object of type signed char
SCHAR_MAX +127 // 2^7 − 1
— maximum value for an object of type unsigned char
UCHAR_MAX 255 // 2^8 − 1
— minimum value for an object of type char
CHAR_MIN see below
— maximum value for an object of type char
CHAR_MAX see below
— maximum number of bytes in a multibyte character, for any supported locale
MB_LEN_MAX 1
— minimum value for an object of type short int
SHRT_MIN -32767 // −(2^15 − 1)
— maximum value for an object of type short int
SHRT_MAX +32767 // 2^15 − 1
— maximum value for an object of type unsigned short int
USHRT_MAX 65535 // 2^16 − 1
— minimum value for an object of type int
INT_MIN -32767 // −(2^15 − 1)
— maximum value for an object of type int
INT_MAX +32767 // 2^15 − 1
— maximum value for an object of type unsigned int
UINT_MAX 65535 // 2^16 − 1
— minimum value for an object of type long int
LONG_MIN -2147483647 // −(2^31 − 1)
— maximum value for an object of type long int
LONG_MAX +2147483647 // 2^31 − 1
— maximum value for an object of type unsigned long int
ULONG_MAX 4294967295 // 2^32 − 1
如果我们看到负值范围,它实际上可能比这里定义的值多一,根据允许的二进制恭维表示。为什么要这样定义?
【问题讨论】:
-
这些尺寸是在标准中定义的?哪个部分?
-
二进制补码不是 AFAIK 的要求。
-
可能是允许 1s 补码和 2s 补码。
-
我不确定是否意味着标准,而是 ANSI limits.h
-
问题Why does INT_MIN = -INT_MIN in a signed twos complement representation NOT 与此问题重复。那里的答案严格来说是关于 2 的补码算法;这里的答案是“因为除了 2 的补码算术之外还有其他二进制算术系统:”。
标签: c