- ベストアンサー
C# uint += long
C# uint += long こんにちは、 C#なのですが、 uint a=0xffff0000; long b=-100; である場合、 a+=b; とするとエラーになります。 オーバーフローは考えないとして、この計算を行うにはどうすればよいのでしょうか? ifで切り分けるか、64bitで計算するしかないのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
オーバーフローを考えないでよいなら a+=(uint)b; として下さい。 期待した結果になります。
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.5
理想論を未確認で続けると, ISO にあるなら JIS にあるかもしれない.
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.4
理想論としては, ISO なり ECMA なりの規格を読んでください. 実際には, Microsoft が勝手に拡張している可能性もありますが....
質問者
お礼
う~ん、そうですか、私の英語力では読みきれない可能性が高そうです・・・(^^; C/C++だと、日本語でもそれなりに信頼できる資料があるんですがね。 今後の課題ということにしておきます。 ありがとうございました。
- tatsu99
- ベストアンサー率52% (391/751)
回答No.2
uint a=0xffff0000; long b=-100; である場合、 a+=b; の結果は、どのような値を期待されていますか。
質問者
補足
0xffff000-100の値です。 0xfffeff9cですね。
- magicalpass
- ベストアンサー率58% (378/648)
回答No.1
符号なし整数型に符号付き整数の演算を行っているのだからエラーになります。 何をやりたいのか明確にした上で、b の方を符号なし整数型に変換して演算してください。符号付き整数型の負の数を単純に符号なし整数型に変換しただけではうまく動きません。
質問者
補足
エラーの理由はわかります。 -100を符号なしにするとは、どういった操作になるのでしょうか。 いまのところ、bが正か負かで処理を分けるしかないのかなと思っているのですが。
お礼
動作は確認しました。ありがとうございます。 負の値を符号なしの型にキャストした際の動作についての規格に関して、良い資料はありますでしょうか?