【发布时间】:2015-04-16 09:58:56
【问题描述】:
我正在阅读 Bjarne Stroustrup 的C++ 编程语言第 4 版,但我无法完全理解第 141 页中提到的以下段落。
每个字符在实现使用的字符集中都有一个整数值。例如, 'b' 的值在 ASCII 字符集中是 98。这是一个输出整数值的循环 您想输入的任何字符:
void intval()
{
for (char c; cin >> c; )
cout << "the value of '" << c << "' is " << int{c} << '\n';
}
符号 int{c} 给出字符 c 的整数值(“我们可以从 c 构造的 int”)。 将 char 转换为整数的可能性提出了一个问题:char 是有符号的还是无符号的? 由 8 位字节表示的 256 个值可以解释为值 0 到 255 或 为值 -127 到 127。不,不是人们可能期望的 -128 到 127:C++ 标准留下了可能性一个互补的硬件,并且消除了一个值;因此,-128 的使用是不可移植的。 不幸的是,普通字符的有符号或无符号选择是实现定义的。 C++ 提供了两种答案明确的类型:signed char,至少可以保存值 -127 到 127,以及 unsigned char,它至少可以保存值 0 到 255。
c++ 标准留下的补码硬件的可能性有多大?是不是要避免8位+128和-128的相同表示?
【问题讨论】:
-
你查过什么是补码吗? ://
-
这是一个完全正确的问题,因为一个人的补码级别更低,更适合实际的机器实现或架构。