C ++テストを行っていたところ、次の質問が間違っていました。
Q:次のプログラムの出力は何ですか?
#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