无符号短整型和无符号short之间的区别

8
在C语言中,unsigned short int和unsigned short声明是否有区别?如果有,请说明是什么?我尝试在网上查找,但没找到任何有价值的信息。
unsigned short int x1;
unsigned short x2;

最后,如果有差异,我该如何将它们分别转换成对方呢?

1
没有任何区别。 - Daniel
5个回答

11

来自C11 [PDF](省略不相关的部分)(重点在此):

6.7.2.2:

在每个声明中的声明说明符中,以及在每个结构体声明和类型名称的限定符列表中,都必须至少给出一个类型说明符。每个类型说明符列表必须是以下多重集之一(当有多个多重集时用逗号分隔)。类型说明符可以以任何顺序出现,可能与其他声明说明符混合在一起。

  • ...
  • shortsigned shortshort intsigned short int
  • unsigned shortunsigned short int
  • ...

6.7.2.5:

逗号分隔的多重集中的每个指定相同的类型……


需要注意的是,它们相同并不保证它们的大小。它们可以是2个字节、4个字节、100个字节或其他任何大小,只要它们不超过“int”的长度。 - Daniel
2
如果您想链接到更方便的C11在线副本,请访问此处:http://port70.net/~nsz/c/c11/n1570.html - R.. GitHub STOP HELPING ICE
我会在评论中保留你的链接,但将PDF的链接放在答案中。 PDF的好处是可以下载并放在桌面上,更容易访问。链接很好,肯定更适合引用。 - Shahbaz
@Daniel,如果我通过套接字连接发送short类型的数据,会遇到平台问题吗? - Goaler444

3

只使用 short 是写入 short int 的简写方式,而 long 则是写入 long int 的简写方式。


3

两者没有任何区别。

第二个被认为是int类型,只是简单地被省略了。


2

它们是同义词。如果你的编译器对它们有不同的处理方式,那么它就是有问题的。


-2

没有区别。尝试使用 sizeof 运算符:

main()
{
  unsigned short int x1;
  unsigned short x2;

  printf("%d/%d\n", sizeof x1, sizeof x2);
}

7
就像我在另一个评论中所说的:尽管它们相同(你的答案是正确的),但你不能用例子证明什么。11是质数,但并不意味着所有奇数都是质数。顺便说一下,intunsigned int也有相同的大小,但它们并不相同。 - Shahbaz
此外,类型的大小可能会在不同的实现之间发生变化。 - effeffe

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