问题描述
char
数据类型不能保证被签名,这意味着在某些实现中它是 signed
,而在其他实现中它是 unsigned
。那么为什么人们总是忽略 signed
限定符?
char c = 'C'; // can be signed or unsigned
signed char sc = 'D'; // explicitly signed
unsigned char uc = 'e'; // explicitly unsigned
-
为了可移植性,如果我希望字符保持负值,我是否应该总是用
char
限定signed
? 正如我所了解的其他类型,如
int
、long
、short
总是signed
,除非用unsigned
明确限定。>
解决方法
类型 char
主要用于存储字符(或者,在 Unicode 时代,部分字符代码)。从这个意义上说,你不应该关心它是否有符号,只要它能够表示字符即可。
当您需要 char
大小的整数时,您应该使用 signed char
或 unsigned char
或它们的典型别名之一(例如 int8_t
或 uint8_t
)。这将确保签名并区分类型和字符。