1

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

我见过一些不同数据类型的值范围表(比如这个)。

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

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

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

4

4 回答 4

4

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

关于表的问题,它不是 C 定义的范围的准确表示。在作者运行它的特定平台上可能是正确的。但它不能总是(也不应该)被视为权威来源。

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

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

例如,可以使用以下方法找到 int 中的位数:CHAR_BIT * sizeof(int)

以同样的方式对于给定的 type T,可以找到位数:CHAR_BIT * sizeof(T).

另请阅读C-FAQ中与您的问题非常相关的前 3 或 4 个问题。

于 2013-10-19T14:56:46.347 回答
0

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

字符将永远是一个字节大(即 8 位,而不是 16 位),并且一个字节将永远只有 2^8=256 种可能的组合,所以一个 char 的范围只会是 0 到 255 或 -128到 127 取决于它是否签名。

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

除了它们的大小(以字节为单位)之外,没有其他参数会影响这些类型可以保存的值,如果你正在做一些取决于它们的大小的事情(比如整数溢出),你应该使用 sizeof() 来检查。

于 2013-10-19T14:37:57.717 回答
0

C 是一种“接近金属”的语言,因此某些东西(例如int的大小)取决于您正在编译的特定架构。它总是在您的程序离开您的手中之前就知道了,因此您可以使用sizeof#defines轻松处理它

随处可见的表格仅供参考。您只能依赖于编译器可见的内容。

于 2013-10-19T14:23:47.190 回答
0

必须有显示的最小范围。这是标准所保证的最低限度,所有符合要求的实现都将至少提供这一点。

于 2013-10-19T14:18:45.177 回答