【问题标题】:short int literals in CC中的短整型文字
【发布时间】:2009-12-15 11:49:47
【问题描述】:

为什么 'C' 中没有短整型字面量?

【问题讨论】:

  • 我之前看过它。不过感谢您的指点。提到不能声明短 int 文字。为什么没有提到。我想知道语言的设计者是否有某种动机不拥有它,如果是的话,它是什么。
  • @Abhijith,你应该编辑你的问题而不是评论它。

标签: c


【解决方案1】:

在 C 中使用短的 int 字面量是没有意义的,因为所有整数表达式都被评估为好像子表达式的大小至少是 int。

【讨论】:

    【解决方案2】:

    或者:因为不需要它们!

    需要各种大小的数据类型才能很好地适应底层硬件和/或节省存储空间,但文字是一种编译时构造,无论如何都会存储到适当的数据结构中。

    floatdouble 不同,因为相同的数字实际上具有不同的内部表示 - 无论如何,不​​仅仅是几个前导零。

    同样,charshort 之间也有区别,尽管它们可能存储在相同的位中:如果程序员在谈论字符数据,他通常会更方便地指定,例如,@ 987654325@比65

    但是一个短的99 和一个int 99 在程序员看来是一样的,在程序中的处理方式是一样的......范围更广的类型可以轻松完成两者的工作。

    【讨论】:

    • “他通常指定‘A’比指定 65 更方便”。尽管在 C 中,字符文字实际上不是 char,但它们也是 int。因此,'A' 是一种很好的、​​可移植的方式来表达“基本字符集中字符 A 的整数值”,但它不会以提问者可能希望从简短文字中获得的方式与类型系统交互。
    【解决方案3】:

    如果我们谈论的是原始语言设计,请记住,C 的大部分当前形状是在 16 位的 PDP-11 CPU 上获得的。所以他们有用于算术的整数和用于字符串存储的字符。指针与整数基本相同。

    该语言非常实用,只是后来才获得了更正式和复杂的语法。所以答案是,它恰好是那样的。很久以后,我们有了 32 位和 64 位 CPU,并且需要区分不同长度的整数。

    直到今天,我几乎所有的 C 程序都像除了 char 和 integer 之外没有其他类型一样编写代码。哦,顺便说一句,根据标准,C 中的“char”既可以是有符号的,也可以是无符号的。这反映了 chars 用于字符存储(字符串)和 int 用于算术。

    为了澄清,(谢谢 semaj)编译器可以选择将声明为“char”的变量视为“unsigned char”。 “int”不会发生这种情况。 “int”总是被签名的,但你不能确定用字符。您必须假设 char 可以具有无符号或有符号算术。这是一种速度优化,以适应在任一实现中运行速度更快的 CPU。 IE。重点放在作为存储容器的字符上,而不是作为算术类型。 (它的名字也是一个赠品。它可以被称为“短”或“小”,但被称为“char”是有原因的。)

    【讨论】:

    • 我怕你弄丢了我。当 int 也可以有符号或无符号时,char 可以是有符号或无符号的这一事实如何暗示它是用于字符存储的?
    猜你喜欢
    • 1970-01-01
    • 2013-02-01
    • 2015-04-17
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    相关资源
    最近更新 更多