Я просто сдавал тест на С++, и у меня был следующий вопрос:
В: Каков вывод следующей программы?
#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
- Undefined Поведение
- Ошибка компиляции
"Правильный" ответ был равен 7. Если в ответах было "Реализованное исполнение", я бы выбрал это, поэтому я выбрал Undefined Behavior, который был скорее ближайшим. Я понимаю, что в sign-and-magnitute, 1 дополнение и 2 дополнения ответ будет равен 7. Но не позволяет ли стандарт С++ теоретически допускать любые другие представления чисел? Например, знак и величина, но 0 означает отрицательный?
Правильно ли я верю, что реальный правильный ответ на этот вопрос должен быть поведением, определяемым реализацией, а если нет, не могли бы вы объяснить, почему ответ равен 7 независимо от реализации?
Я прочитал комментарии к вопросу, и кажется, что изначально тип a
был char, что, видимо, вызвало множество жалоб на то, подписано ли char
или нет, так что тестовый набор изменил его на int8_t. В качестве бонусного вопроса, есть <stdint.h>
часть С++? O_O