在大多数情况下,人们会声明一个 char
对象来分配 ascii 表中从 0 到 127 的字符值之一。即使是扩展字符集的范围从 128 到 255(仍然是正数) )。所以我假设在处理字符的打印时,只需要使用一个unsigned char
。
现在,基于对 SO 的一些研究,人们在需要使用非常小的整数时使用 signed char
,但为此我们可以使用 [u]int8
类型。所以我很难理解为什么需要使用 signed char
?如果您正在处理基本字符 ascii 表(unsigned char
已经能够做到),则可以使用它,或者您可以使用它来表示小整数([u]int8
已经处理好了)。
有人可以提供一个编程示例,其中 signed char
优于其他类型吗?
最佳答案
原因是您至少不知道普通 char
变量是有符号还是无符号。不同的实现有不同的方法,一个普通的 char
可以在一个平台上签名而在另一个平台上未签名。
如果你想在 char
类型的变量中存储负值,你绝对必须将它声明为 signed char
,因为只有这样你才能确定每个平台将能够在其中存储负值。是的,你可以使用 [u]int8
类型,但并非总是如此(仅在 C++11 中引入),而实际上 int8
是很可能是 signed char
的别名。
此外,uint8_t
和 int8_t
被定义为 optional 类型,这意味着你不能总是依赖它的存在(与 签名字符
)。特别是,如果机器的字节单元超过 8 位,则不太可能定义 uint8_t
和 int8_t
(尽管它们可以;编译器总是免费提供并进行适当的计算)。请参阅此相关问题:What is int8_t if a machine has > 8 bits per byte?
关于c++ - 在什么情况下会在 C++ 中使用有符号字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22270918/