Jon*_*art 11
答案确实是:这取决于您的平台.
幸运的是,这都是在您的实现中定义的<limits.h>.在这里,您将找到定义a的有效范围的常量char,以及所有其他标准数据类型.
A char是一个字节,通常是 8位.从技术上讲,a char是CHAR_BIT位.对于一些非常旧的机器,这是7,但这些是在C规范要求之前CHAR_BIT >= 8.还有其他类似DSP的实现具有更大的chars.
char可采取的范围内CHAR_MIN,以CHAR_MAXsigned char可采取的范围内SCHAR_MIN,以SCHAR_MAXunsigned char可以利用的范围内0,以UCHAR_MAXCHAR_MIN == SCHAR_MIN,那么你char的签名; 否则它是未签名的.根据C标准(N1570草案):
5.2.4.2.1 整数类型的大小
下面给出的值应替换为适用于 #if 预处理指令的常量表达式。此外,除了 CHAR_BIT 和 MB_LEN_MAX 之外,以下内容将被替换为具有相同类型的表达式,该表达式是根据整数提升转换的相应类型的对象。它们的实现定义的值在幅度(绝对值)上应等于或大于所示值,并具有相同的符号。
— 不是位域的最小对象的位数(字节)
Run Code Online (Sandbox Code Playgroud)CHAR_BIT 8— 符号类型对象的最小值
Run Code Online (Sandbox Code Playgroud)SCHAR_MIN -127 // ?(2^7 ? 1)— 符号类型对象的最大值
Run Code Online (Sandbox Code Playgroud)SCHAR_MAX +127 // 2^7 ? 1— unsigned char 类型对象的最大值
Run Code Online (Sandbox Code Playgroud)UCHAR_MAX 255 // 2^8 ? 1
可以通过 中定义的值检查您的实现的确切值<limits.h>。