(un)signed short int (C)

Posted

技术标签:

【中文标题】(un)signed short int (C)【英文标题】: 【发布时间】:2014-07-03 08:04:43 【问题描述】:

在本网站的另一个问题中已经确定,C 中没有文字后缀,可以执行以下操作:

short Number = (short)1;

但是投射和不投射有什么区别:

short Number = 1;

您使用哪种以及编译器如何以不同方式处理它们是否重要?

【问题讨论】:

当你像这样声明一个类型化变量时,它会“自动转换”为所述类型,所以没有区别。 这很重要,因为默认文字是 int,所以 int 的范围更大,因为 Mayarz 说它被隐式转换为 short,但是在高警告级别下,编译器不会喜欢这样(并且会总是喜欢明确的演员表)。 @harper : "取决于编译器的心情";这表明它不是确定性的并且可能会有所不同。它可能取决于编译器实现、编译器版本和编译器选项,而不是它的“心情”。无论哪种方式,两者都是有效的 C 并且在语义上是相同的 - C 编译器必须接受其中任何一种,而不管它可能输出的任何诊断信息。 【参考方案1】:

隐式演员表和强制演员表的效果没有区别,强制演员表主要是“纪录片” - 它说“我故意这样做”

显式转换让潜在的维护者很清楚,它们的类型是故意short 并且不应该更改以匹配初始化程序。它还可以用于使编译器或静态分析工具警告静音。但是,如果您提供的初始化程序对于短期而言太大 - 它也会消除任何警告。

显式转换在宏定义中可能更有用,例如:

#define DEFAULT_CONDITION ((short)1)

short condition = DEFAULT_CONDITION ;

【讨论】:

【参考方案2】:

这两种情况下代码的行为是相同的。

但是,如果您将 int 分配给 short(使用隐式转换),某些代码检查器/编译器可能会发出警告。

我知道的大多数工具都不会对字面值执行此操作。他们检查已知文字是否真正适合较小的类型。

【讨论】:

以上是关于(un)signed short int (C)的主要内容,如果未能解决你的问题,请参考以下文章

short型与int型的区别

c语言的基本整型(int)和短整型(short)又啥不一样?这些有啥用?

short与int

JAVA int类型转short类型

unsigned char 和 signed char 区别

C——复习