问题 int和signed int声明之间的区别


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

我理解为什么 unsigned int 和 int 不同但是 int 和 signed int 与众不同对我来说是一个新的。


8720
2017-10-18 10:28


起源

这对我来说也是新的。在线说教程?如果是这样,将非常感谢链接。 - Shawn Chin


答案:


这仅仅是出于历史原因。今天你宣布的时候 int 你得到一个 signed int。即使使用今天的编译器,您可能会看到差异的唯一一点是 char 与 signed char 它们是不同的规范(并且在分配文字字符串时值得注意)但不是 int


13
2017-10-18 10:38



char和signed char有什么区别呢?你能举个例子吗? - Anon
@Anon - 事情就是这样 未定义 是否一个 char 是 signed 要么 unsigned 默认。标准对此没有任何说明。 - Kiril Kirov
@Kiril,谢谢。来自我的+1。干净利落。 - Anon
它的实现定义是否 char 是签名类型或无符号类型。无论它是哪一种,它仍然是一种不同的类型 signed char 和 unsigned char 正如eznme所说。所以标准确实如此 某物 关于它,它说实施是需要记录它是否签署:-) - Steve Jessop
“C99 6.7.2.5每个逗号分隔的集合指定相同的类型, 除了比特字段,是实现定义的是说明符int是指定与signed int相同的类型还是与unsigned int相同的类型。“我读到这意味着如果你有一个int类型的字段,那么它可以作为无符号或有符号,取决于实现。因此,当使用位字段时,你可能想要明确指定它是有符号还是无符号你会认为char,short,long等位字段也是如此。用bit字段显式是最安全的。 - jschultz410


据我所知,差异仅存在于char数据类型中。哪里 char a; 可 signed char a; 要么 unsigned char a; 取决于编译器选项。如 本文 说。 (--signed_chars) 对于int数据类型,两者之间没有区别 int 和 signed int


2
2017-10-18 10:46



+1,接受Eznme的答案,因为他/她早些时候回复并且和你的回答一样。 - Anon
char 永远不会是同一类型 unsigned char 要么 signed char,即使它与其中一个具有相同的范围和表示。 - Steve Jessop
@SteveJessop你能解释一下还是指点我能阅读的地方? - CCoder
@grhegde:C99标准可在 open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf。第6.2.5节定义了内置类型,该部分的第14段说:“即使实现定义了两个或多个具有相同表示的基本类型,它们仍然是不同的类型”。 C89和C11相似。 - Steve Jessop
@SteveJessop非常感谢。 - CCoder