【发布时间】:2025-12-17 11:05:01
【问题描述】:
c++ 中的有符号短和普通短有什么区别?范围不一样吗?
【问题讨论】:
-
如果我错了,请纠正我,但
normal不是 C++ 关键字。 -
“正常短”的意思是“短”,没有任何“(未)签名”说明符。
c++ 中的有符号短和普通短有什么区别?范围不一样吗?
【问题讨论】:
normal 不是 C++ 关键字。
short默认是signed,所以没有区别。
【讨论】:
signed short 是允许的?简化语法?
public(默认为公共可见性时)、private(默认为私有可见性时),或者在这种情况下为signed(默认为签名时)。它使语言更加一致,这通常是所需的属性。
Declaration A -> type: short, signed: true; Declaration B -> type: char, signed: false 之类的伪代码逻辑(应该产生 signed short <identifier>;unsigned char <identifier>)生成声明比跟踪特定类型的签名/未签名默认值更容易(对于 short,默认值是签名的,对于char 在这种特殊情况下,它是实现定义的)。
名称signed short int、signed short、short int 和short 是同义词,在 C++ 中表示相同的类型。
【讨论】:
signed char 和 char 整数类型不相同。 char 与 unsigned char 或 signed char 相同,你不知道是哪一个(好吧,好吧,我撒谎了;这取决于你的架构)。
wchar_t 或 float 甚至可能无法使用 signed 来限定它,但这可能与 OP 的问题相去甚远。
默认情况下,整数在 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,因此该关键字在语言中将永远有用。