C数据类型的值范围是“系统”依赖的?

时间:2013-10-19 14:02:42

标签: c

我刚开始编写C编程。语言,并希望直接获得数据类型 - 大小 - 值主题。

我见过几个不同数据类型的值范围表(such as this one)。

问题是,我在这里学到并读到有不同的参数影响每种数据类型的大小,我的假设是值范围也应该有所不同。

例如,如果1 byte = 16 bit,那么我认为signed char可以容纳0-65535。

这些表的准确度如何?它们显示的范围是否有保证(但类型实际上也可以保持更小\更大的值)?

4 个答案:

答案 0 :(得分:4)

C语言规范没有为每种数据类型定义任何确切的范围。它仅定义特定类型应该能够容纳的最小值。

那个表上提出你的问题,它不是由C定义的范围的准确表示。在作者运行它的特定平台上可能是这样。但它并不总是(也不应该)被视为权威来源。

如果您想了解平台的确切范围,请查看(或包含)<limits.h>。或者您可以在类型上使用sizeof运算符来从编译器获取信息。

如果您想知道位的确切数量,请使用CHAR_BIT中定义的<limits.h>

例如,可以使用CHAR_BIT * sizeof(int)找到int中的位数。

对于给定类型T,同样可以找到位数:CHAR_BIT * sizeof(T)

另请阅读与您的问题非常相关的第一个3 or 4 questions from the C-FAQ

答案 1 :(得分:0)

必须提供此处显示的最小范围。它是标准保证的最低要求,所有符合要求的实现至少会提供。

答案 2 :(得分:0)

C是一种“接近金属”的语言,因此有些东西(比如 int 的大小)取决于你编译的特定架构。在您的程序离开之前总是知道它,因此您可以使用 sizeof #defines

轻松处理它

在任何地方找到的表仅供参考。您只能依赖于编译器可见的内容。

答案 3 :(得分:0)

您的思维过程或多或少是正确的。这些表通常是可靠的,因为只要知道它们的大小,它们就很容易计算。

字符总是大一个字节(8位,而不是16位),并且一个字节将只有2 ^ 8 = 256种可能的组合,因此字符的范围将只为0到255或-128到127,具体取决于是否签名。

对于我们的其他整数,同样的逻辑适用。这里唯一的区别是这些类型的大小取决于您编译的操作系统(表确认,为2个字节的int和4个字节的int赋予不同的范围)。

除了大小(以字节为单位)之外,没有其他参数可以影响这些类型可以容纳的值,如果你做的是依赖于它们的大小(比如整数溢出),你应该使用sizeof()来检查为此。

相关问题