我刚刚参加了一个 C++ 测试,但我错误地回答了以下问题:
问:以下程序的输出是什么?
#include <iostream>
#include <stdint.h>
using namespace std;
int main() {
int a = 0;
for (int8_t i = 1; i > 0; i <<= 1)
a++;
cout << a;
return 0;
}
有以下答案可供选择
- 8
- 7
- 未定义的行为
- 编译错误
“正确”的答案是 7。如果答案中有“实现定义的行为”,我会选择那个,所以我选择了最接近的未定义行为。我知道在符号和幅度、1 的补码和 2 的补码中,答案将是 7。但是 C++ 标准理论上不允许任何其他数字表示吗?例如符号和大小,但 0 表示负数?
我是否正确,因为这个问题的真正正确答案应该是实施定义的行为,如果不是,您能否解释一下为什么答案是 7 而不管实施如何?
我阅读了对该问题的评论,最初的类型似乎a
是 char,这显然引起了很多关于是否char
已签名的投诉,因此测试集将其更改为 int8_t。作为一个额外的问题,是<stdint.h>
C++ 的一部分吗?O_O