【问题标题】:Data type declaration than allocated size数据类型声明比分配的大小
【发布时间】:2021-11-25 10:44:30
【问题描述】:

我浏览了很多文档,但仍然没有得到 C 中数据类型使用的大小,可能所有编程语言都是如此。

假设我们声明了一个像“int = a”这样的变量,我们都知道数据类型“int”的大小为4字节(暂时忘记拱形计算机,这是为了简单起见)它可以保存值从 -2^31 到 2^31 – 1 即 [0 到 4,294,967,295]。

现在的问题是,每个字符或字母或数字都存储为 8 位或一个字节,所以如果 int 只有 4 个字节作为数据类型大小,如何存储像 200,000 甚至最大值这样的数字4,294,967,295。

没有具体的文档可以解释数据类型的确切大小。

【问题讨论】:

  • 不是以字符形式存储的,而是以二进制数形式存储的。
  • 4 x 8 是 32,你有什么疑问?
  • C 和 C++ 是两种非常不同的语言。如果您询问 C 中的行为,请仅标记 C。
  • @Someprogrammerdude 整数的表示是一样的。这是一个跨越许多编程语言的非常普遍的问题。
  • 至于数据类型的大小,除了sizeof(char) == 1sizeof(char) <= sizeof(short) && sizeof(short) <= sizeof(int) && sizeof(int) <= sizeof(long long) 之外,没有任何保证。另请注意,即使sizeof(char) == 1 得到保证(由规范),这并不意味着char 是单个8 位字节。有些系统带有 C 编译器,其位数可能是 79。在某些系统中,char 确实是16 位,但sizeof(char)仍然等于1

标签: c++ c types


【解决方案1】:

一个 4 字节的字符串确实只能存储最大为 9999 的数字,或者如果为减号留出空间,则只能存储 999。但这非常低效,仅在 32 位数据中存储大约 13 位数字。

整数数据类型被存储为二进制two's complement 用于有符号数或简单地存储在binary 中用于无符号数。这将使用所有位,允许存储 -2^(n-1)2^(n-1)-1 用于有符号数或 02^n-1 用于无符号数,其中n 是数字中的位数。

【讨论】:

  • "一个 4 字节的字符串" 没有空终止符...
  • @Someprogrammerdude 如果您要将数字存储为固定长度的字符串,则不需要空终止符,在数字开头填充 0 会更有效
  • Alan,C 库将 string 定义为包含终止 null 字符。使用 string 就像“4 字节字符串确实只能存储最多 9999 ....”的数字,这与此相反,降低了这个答案的价值。考虑“4字节字符array ...”。
  • @chux-ReinstateMonica 我从来没有说过“一个 4 字节的 C 字符串”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多