【问题标题】:Difference between int and signed int declarationint 和signed int 声明的区别
【发布时间】:2012-10-18 10:28:09
【问题描述】:

我正在阅读一些关于嵌入式编程的教程,其中一个说 intsigned int 不同,但没有解释如何或为什么。

我理解为什么 unsigned intint 不同,但 intsigned int 不同对我来说是新的。

【问题讨论】:

  • 这对我来说也是新的。网上有说教程吗?如果是这样,一个链接将不胜感激。

标签: c types int standards declaration


【解决方案1】:

这只是出于历史原因。今天,每当您声明 int 时,您都会得到 signed int。即使使用今天的编译器,您可能会看到差异的唯一一点是 charsigned char 的规范不同(在分配文字字符串时值得注意),但与 int 不同。

【讨论】:

  • 那么char和signed char有什么区别呢?可以举个例子吗?
  • @Anon - 问题是,默认情况下,charsigned 还是 unsignedundefined。标准对此只字未提。
  • @Anon char vs signed char 也是历史性的,早期的架构可以将其定义为两者之一,事实上,某些架构仅使用 7 位。
  • char 是有符号类型还是无符号类型由实现定义。无论是哪一个,它仍然是不同于 signed charunsigned char 的类型,正如 eznme 所说。所以标准确实对它说something,它说实现需要记录它是否已签名:-)
  • "C99 6.7.2.5 每个逗号分隔的集合指定相同的类型,除了位域,它是实现定义的说明符是否int 指定与 signed int 相同的类型或与 unsigned int 相同的类型。”我读到这意味着如果您有一个 int 类型的位字段,那么它可以充当无符号或有符号,具体取决于执行。因此,在使用位字段时,您可能希望明确指定它是有符号的还是无符号的。您会认为 char、short、long 等位字段也是如此。使用位域明确是最安全的。
【解决方案2】:

据我所知,差异仅存在于 char 数据类型。其中char a; 可以是signed char a;unsigned char a;,具体取决于编译器选项。正如this article 所说。 (--signed_chars) 对于 int 数据类型,intsigned int 没有区别。

【讨论】:

  • +1,接受 Eznme 的回答,因为他/她回答较早且与您的回答相同。
  • @SteveJessop 你能解释更多或指出我可以阅读的地方吗?
  • @grhegde:open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf 提供了 C99 标准。第 6.2.5 节定义了内置类型,该节的第 14 段说,“即使实现定义了两个或多个基本类型以具有相同的表示形式,它们仍然是不同的类型”。 C89 和 C11 类似。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 2015-02-17
  • 2014-03-11
  • 2010-12-08
  • 1970-01-01
相关资源
最近更新 更多