有符号短和普通短有啥区别
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 int
、signed short
、short int
和short
是同义词,在 C++ 中表示相同的类型。
【讨论】:
请注意,signed char
和 char
整数类型不相同。 char
与 unsigned char
或 signed char
相同,你不知道是哪一个(好吧,好吧,我撒谎了;这取决于你的架构)。
@vonbrand 是的,wchar_t
或 float
甚至可能无法使用 signed
来限定它,但这可能与 OP 的问题相去甚远。【参考方案3】:
默认情况下,整数在 C++ 中进行签名,IMO 对 signed
关键字的存在提出了质疑。从技术上讲,它是多余的,也许它确实有助于一些清晰,但几乎没有人在生产中使用它。每个人都非常清楚整数默认是有符号的。老实说,我不记得上次在生产代码中看到 signed
是什么时候了。
对于浮点数和双精度数 - 它们根本不能无符号,它们总是有符号的。
在这方面,C++ 语法有点多余,至少 IMO 是这样。有许多不同的方式来表达同一件事,例如signed short int
、signed short
、short int
和 short
,你所说的仍然可能是平台甚至编译器相关的。
例如,像 Qt 这样的框架声明了它们自己的约定,这些约定更短且信息丰富,例如:
quint8, quint16, quint32, quint64 都是无符号整数,数字表示位大小,逻辑相同:
qint8、qint16、qint32、qint64 是有符号整数,具有各自的位宽。
uint
至少对我来说比unsigned
或unsigned int
更可取,同样的逻辑你也有ushort
,它比unsigned short int
更可取。还有uchar
完成短硬家族。
【讨论】:
signed
有时用于结构的位压缩成员和char
,因此该关键字在语言中将永远有用。以上是关于有符号短和普通短有啥区别的主要内容,如果未能解决你的问题,请参考以下文章