2022年06月23日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 201 count

読者サービス・オマケのC#クイズ・数値計算の不思議編

Written By: 川俣 晶連絡先

お題 §

 以下のソースコードは実行するとiと-iは同じになりますが、sと-sは同じになりません。両者の違いはintとshortの型の違いだけですがどちらも符号付き整数です。

  • なぜiと-iは同じなのか
  • なぜ-sは同じにならないのか

 全部説明できたらC#の大ベテランです。

 解説は最後に。

ソースコード §

var s = short.MinValue;

Console.WriteLine($"s={s}");

Console.WriteLine($"-s={-s}");

var i = int.MinValue;

Console.WriteLine($"i={i}");

Console.WriteLine($"-i={-i}");

実行結果 §

s=-32768

-s=32768

i=-2147483648

-i=-2147483648

解説 §

解説はテキストを選択すると読めます。

負数を表す2の補数表現は、負数の最大値に対応する正数の最大値を表現できません。2の補数を計算すると元に値に戻ってしまいます。ですから、int.MinValueの値はマイナス演算子で正数にすることはできません。ここまでは、2の補数表現を使用するほとんど全てのプログラミング言語で共通の挙動です。ところが、C#の場合はshort型などint型よりも少ないビット数の型を使うと同じように振る舞いません。C#の数値計算は少なくともint型までbit幅を広げてから行われるので、short.MinValueを負数にする処理はint型に拡大してから行われます。int型では、32768も-32768も楽々表現できるので、特に表現できない数値になることはなく、計算通りの結果となります。

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
(ありません)
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2022年
02月
07日
new_C#入門・全キーワード明快解説!・第1段階終了のお知らせ
3days 2 count
total 739 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20220623080939
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.