• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語signed long long型の演算)

C言語signed long long型の演算に関する疑問

このQ&Aのポイント
  • C言語でsigned long long型を使用して演算を行った場合に、期待した結果とならない問題が発生することがあります。
  • 具体的には、変数bに格納される値が期待した値ではなく、異なる値になってしまいます。
  • この問題は、変数の型宣言や32bitと64bitの環境での違いによって引き起こされます。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

unsigned int の 1 と int の -1 を掛けるので 1. int の -1 を unsigned int に変換する. その結果は 42.... 2. unsigned int の 1 と上で得られた値を掛ける. もちろん結果は 42.... んで, その結果を signed long long に入れるので (値が保存されて) 42.... ということでは.

ecardms
質問者

お礼

早速の回答ありがとうございます。 「値が保存されて」とありますが、この場合、aの宣言をsigned intにした場合も同様の結果(4294967295)にならないのでしょうか? 計算式の右辺の処理手順を考えるとunsigned intの演算結果として4294967295になるのは分かるのですが、signed intの場合になぜ4バイト演算結果の値が保存されずに8バイト領域の先頭4バイトに0xFFFFFFFFが補完されてしまうのかの理由が分かりません・・・

ecardms
質問者

補足

スミマセン、説明をよく読んだら解決しました。 1.の処理の時点で-1が型変換され4294967295になっているという点に気づきませんでした。 つまり、signed intで宣言した場合は、1.の変換は必要なくなり、2.でsigned intの1と-1を掛けて結果が-1となり、そのままsigned long longに格納・・・という手順になるわけですね。 ありがとうございました。