c++ - 在什么情况下会在 C++ 中使用有符号字符?

标签 c++ char

在大多数情况下,人们会声明一个 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_tint8_t 被定义为 optional 类型,这意味着你不能总是依赖它的存在(与 签名字符)。特别是,如果机器的字节单元超过 8 位,则不太可能定义 uint8_tint8_t(尽管它们可以;编译器总是免费提供并进行适当的计算)。请参阅此相关问题:What is int8_t if a machine has > 8 bits per byte?

关于c++ - 在什么情况下会在 C++ 中使用有符号字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22270918/

相关文章:

c++ - Visual Studio 调试断言失败对话框无响应

c++ - C++ 的 StyleCop

代码不能正确地用另一个替换字符串中的一个字符

检查字符串中的每个字符会产生意想不到的结果

c++ - 不能在同一个文件中包含 wdm.h 和 ntifs.h

c++ - 使用内联 asm Hook usercall

c - 如何在 Dev C++ 中使用像 ╔ ═ 和 ╗ 这样的字符作为字符串的一部分?

java - 除非外部循环的值非零,否则 3 个 for 循环的内部不会运行,但仅当在最内部循环内部进行减法时才会运行

c++ - 没有规则使目标 '/usr/lib/x86_64-linux-gnu/libboost_filesystem.so`

arrays - C程序语法