整数オーバーフローとアンダーフローについて学習していますが、負の入力nを与えることでjの値を制御できるかどうか疑問に思っていましたか?例えば整数オーバーフロー/アンダーフロー
int i = n;
size_t j = i;
printf("%lu",j);
私は「J」の値は255になりたい場合は、それは私にその出力を与える負の数「n」を作ることは可能ですか?
整数オーバーフローとアンダーフローについて学習していますが、負の入力nを与えることでjの値を制御できるかどうか疑問に思っていましたか?例えば整数オーバーフロー/アンダーフロー
int i = n;
size_t j = i;
printf("%lu",j);
私は「J」の値は255になりたい場合は、それは私にその出力を与える負の数「n」を作ることは可能ですか?
私は何を探していることは8ビット、署名数-1で
signed char i = -1;
unsigned char j = i;
printf("%u\n", j);
だと思いますが、はい、ので、あなたはおよそsize_t
を尋ね255
符号なしの値に「ラップアラウンド」それは符号なしタイプですが、通常は32または64ビットです。これらのサイズでは、数値255は符号付きと符号なしの両方のバリアントで表現可能(したがって同じ表現)であるため、255に対応する負の数はありません。しかし、異なる値を使用して同様の効果を確かに見ることができます。たとえば、32ビットintを持つマシンでは、次のコードが使用されます。
unsigned int i = 4294967041;
int j = i;
printf("%d\n", j);
は-255を出力する可能性があります。この値は、2^32 - 255 = 4294967041だからです。
後者のコードでは、振る舞いは実装定義されています(信号を発生させるかもしれません) –
はい! 'n'を255に設定することができます。:-P –
"整数アンダーフロー "はありません。一般的に受け入れられている命名法では、"アンダーフロー "は浮動小数点演算でのみ起こります。あなたの質問としては、答えは単純です: 'n'を' 255'に設定してください。答えの単純さと単純さは、あなたがあなたの質問で何かを逃したと思わせます。 – AnT
申し訳ありませんが、私は負の値を与えることを意味します。私は質問を更新しました –