c言語で2つの変数a,bの中身を入れ替えるプログラムでどのサイトを見ても大体もう一つ変数を用意したり、排他的論理和を使っています。普通に

c言語で2つの変数a,bの中身を入れ替えるプログラムでどのサイトを見ても大体もう一つ変数を用意したり、排他的論理和を使っています。普通に a -= (b = (a += b) - b); のような感じではだめなのでしょうか?

C言語関連46閲覧

ベストアンサー

0

int型等の整数値だったら問題ないと思います。 ただしaとbが浮動小数点型(float等)だった場合 桁落ち/情報落ち/丸め誤差等で入れ替えた結果値が変わることがあります。 安全性と可視性を考えて一時変数を使うことが多いですね。

ThanksImg質問者からのお礼コメント

とても分かりやすかったです。変数の中身を「入れ替える」という題にそもそもこのプログラムは従えてなかったですね…floot型の数値誤差とint型でもオーバーフローの可能性がありました…ちゃんと型の全範囲の値に対応させてないと話にならなかったですね。丁寧な回答ありがとうございました。

お礼日時:9/17 3:14

その他の回答(2件)

0

副作用が有りそうな気がしますが・・・ a -= の a が a+=b 以前の数値を使わない確証があれば いいんじゃないでしょうか。 私は不安なのでしませんが。

0

ちゃんと動作するなら私はダメではないと思います。 (普通かどうかは感性の問題ですね) (他の人がみるならコメントで//swapとか入れとく配慮はありかも) ↓のサイトで、変数交換の速度比較をしてます。 https://blog.hokt.net/394 パフォーマンス面が気になる場合、同じようにやってみるのも ありかも知れません。