9
8ビット整数から8ビットより大きい値を取得するにはどうすればよいですか?
この小さな宝石の後ろに隠れている非常に厄介なバグを見つけました。C ++仕様によると、符号付きオーバーフローは未定義の動作ですが、値がbit-widthに拡張されたときにオーバーフローが発生した場合のみsizeof(int)です。私が理解しているように、のインクリメントは、でcharある限り、未定義の動作であってはなりませんsizeof(char) < sizeof(int)。しかし、それはどのようcにして不可能な価値を得ているのかを説明していません。8ビット整数として、cそのビット幅より大きい値をどのように保持できますか? コード // Compiled with gcc-4.7.2 #include <cstdio> #include <stdint.h> #include <climits> int main() { int8_t c = 0; printf("SCHAR_MIN: %i\n", SCHAR_MIN); printf("SCHAR_MAX: %i\n", SCHAR_MAX); for (int32_t i = 0; i <= 300; i++) printf("c: %i\n", c--); printf("c: %i\n", c); return 0; } 出力 SCHAR_MIN: -128 SCHAR_MAX: …
118
c++
gcc
undefined-behavior