2017-09-20 13 views
0

整数オーバーフローとアンダーフローについて学習していますが、負の入力nを与えることでjの値を制御できるかどうか疑問に思っていましたか?例えば整数オーバーフロー/アンダーフロー

int i = n; 
size_t j = i; 
printf("%lu",j); 

私は「J」の値は255になりたい場合は、それは私にその出力を与える負の数「n」を作ることは可能ですか?

+3

はい! 'n'を255に設定することができます。:-P –

+0

"整数アンダーフロー "はありません。一般的に受け入れられている命名法では、"アンダーフロー "は浮動小数点演算でのみ起こります。あなたの質問としては、答えは単純です: 'n'を' 255'に設定してください。答えの単純さと単純さは、あなたがあなたの質問で何かを逃したと思わせます。 – AnT

+1

申し訳ありませんが、私は負の値を与えることを意味します。私は質問を更新しました –

答えて

1

私は何を探していることは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だからです。

+0

後者のコードでは、振る舞いは実装定義されています(信号を発生させるかもしれません) –