有符号短和普通短有啥区别

Posted

技术标签:

【中文标题】有符号短和普通短有啥区别【英文标题】:What is the difference between signed and normal short有符号短和普通短有什么区别 【发布时间】:2013-03-10 12:46:23 【问题描述】:

c++ 中的有符号短和普通短有什么区别?范围不一样吗?

【问题讨论】:

如果我错了,请纠正我,但normal 不是 C++ 关键字。 “正常短”的意思是“短”,没有任何“(未)签名”说明符。 【参考方案1】:

short默认是signed,所以没有区别。

【讨论】:

出于好奇:那为什么signed short 是允许的?简化语法? @pmor 在我知道的大多数语言中,允许使用冗余修饰符。它可以是public(默认为公共可见性时)、private(默认为私有可见性时),或者在这种情况下为signed(默认为签名时)。它使语言更加一致,这通常是所需的属性。 我能想到的一个实际应用是元编程,无论是宏还是某种脚本。使用 Declaration A -> type: short, signed: true; Declaration B -> type: char, signed: false 之类的伪代码逻辑(应该产生 signed short <identifier>unsigned char <identifier>)生成声明比跟踪特定类型的签名/未签名默认值更容易(对于 short,默认值是签名的,对于char 在这种特殊情况下,它是实现定义的)。【参考方案2】:

名称signed short intsigned shortshort intshort 是同义词,在 C++ 中表示相同的类型。

【讨论】:

请注意,signed charchar 整数类型相同。 charunsigned charsigned char 相同,你不知道是哪一个(好吧,好吧,我撒谎了;这取决于你的架构)。 @vonbrand 是的,wchar_tfloat 甚至可能无法使用 signed 来限定它,但这可能与 OP 的问题相去甚远。【参考方案3】:

默认情况下,整数在 C++ 中进行签名,IMO 对 signed 关键字的存在提出了质疑。从技术上讲,它是多余的,也许它确实有助于一些清晰,但几乎没有人在生产中使用它。每个人都非常清楚整数默认是有符号的。老实说,我不记得上次在生产代码中看到 signed 是什么时候了。

对于浮点数和双精度数 - 它们根本不能无符号,它们总是有符号的。

在这方面,C++ 语法有点多余,至少 IMO 是这样。有许多不同的方式来表达同一件事,例如signed short intsigned shortshort intshort,你所说的仍然可能是平台甚至编译器相关的。

例如,像 Qt 这样的框架声明了它们自己的约定,这些约定更短且信息丰富,例如:

quint8, quint16, quint32, quint64 都是无符号整数,数字表示位大小,逻辑相同:

qint8、qint16、qint32、qint64 是有符号整数,具有各自的位宽。

uint 至少对我来说比unsignedunsigned int 更可取,同样的逻辑你也有ushort,它比unsigned short int 更可取。还有uchar完成短硬家族。

【讨论】:

signed 有时用于结构的位压缩成员和char,因此该关键字在语言中将永远有用。

以上是关于有符号短和普通短有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

linux操作系统文件类型有哪几种,有啥区别?

linux命令ln的两个不同参数,-d硬链接,-s符号链接,有啥区别?

关键字符号和引用符号有啥区别?

这两种符号有啥区别?

符号链接和硬链接有啥区别?

Common Lisp 中的原子和符号有啥区别?