C编程数据类型

6
一个问题被提出,我不确定我是否给出了准确的答案。问题是,为什么使用int,而不是char,它们为什么要分开?它们都被保留在内存和位中,为什么数据类型有不同的类别?
能否有人对此进行解释?
6个回答

10

char是最小的可寻址内存块,非常适合操作数据缓冲区,但无法容纳超过256个不同的值(如果char是8位的话,这是通常情况),因此对于数字计算不太好用。 int通常比char大-更适合于计算,但不太适合于字节级操作。


3
通常情况下,C语言中的char类型是8位的,但这并不是绝对的。C语言并没有规定或保证char类型一定是8位的。你可以参考<limit.h>和CHAR_BIT来了解更多信息。 - unwind
3
ANSI C语言定义保证char至少为8位,但从理论上讲,它可能会更大。 - Lucas Lindström
我曾经参与过一个CPU设计,其中sizeof(char)、sizeof(short)、sizeof(int)、sizeof(long)和sizeof(float)都是1。如果当时有<limit.h>,CHAR_BIT将会是32。幸运的是,由于客户放弃了这个项目,它从未得到实施,否则大多数程序员的理智可能会受到影响。 - RBerteig
sizeof返回的是以字节为单位的大小,不是吗?因此,对于任何将char实现为一个字节(无论是8位、7位还是更疯狂的)的系统,sizeof(char) == 1都是正确的。 - Lucas Lindström

3
请记住,C有时被用作更高级别的汇编语言,与低级硬件交互。您需要使用与机器级功能匹配的数据类型,例如字节宽I/O寄存器。
来自维基百科,C (programming language)

C的主要用途是“系统编程”,包括实现操作系统和嵌入式系统应用程序,由于具有可移植性和效率等理想特性的组合,能够访问特定的硬件地址,能够“pun”类型以匹配外部强加的数据访问要求,并且对系统资源的运行时需求较低。


1
过去,计算机的内存很小。这就是为什么你需要不同的数据类型的主要原因。如果你只需要一个变量来保存小数字,你可以使用8位字符而不是使用32位长整型。然而,如今内存很便宜。因此,这个原因现在不太适用,但仍然存在。
然而,请记住每个处理器都有一个默认的数据类型,即它以某种宽度(通常为32位)运行。因此,如果你使用了8位字符,该值需要扩展到32位再进行计算。这可能会稍微减慢你的算法。

1

标准对 charint 的限制非常少:

  • char 必须能够容纳 ASCII 值,即至少为 7 位(根据 C 标准,CHAR_BIT 至少为 8)。它也是最小的可寻址内存块。

  • int 至少为 16 位宽,是“推荐”的默认整数类型。这个建议留给实现(你的 C 编译器)。


从C标准6.2.5.3中挖掘出来的内容:声明为char类型的对象足够大,可以存储基本执行字符集中的任何成员。如果将基本执行字符集的成员存储在char对象中,则其值保证为非负数。如果将任何其他字符存储在char对象中,则生成的值是实现定义的,但必须在该类型可以表示的值范围内。 - dojob
1
5.2.4.2.1 规定:不是位域的最小对象所需的位数(字节)为 CHAR_BIT 8。这意味着 'char' 值中必须至少有 8 个位(但可以是有符号或无符号的)。 - Jonathan Leffler

0
一般而言,有一些算法和设计是抽象的,数据类型有助于实现这些抽象。例如 - 重量通常以有理数表示,最好在存储中以float / double的形式实现,即具有精确度部分的数字。希望这能帮到您。

0

int 是“自然”的整数类型,大多数计算应该使用它。

char 本质上是一个字节;它是可寻址的最小内存单元。虽然大多数情况下 char 是8位宽度,但并非所有平台都是如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接