質問

.NETのインデックスとして署名番号を使用する理由は何ですか?

Pythonでは、マイナス数を送信して配列の最後からインデックスを付けますが、これは.NETではそうではありません。 .NETは、おそらくインデックス作成時に特別なルール(ええ、悪い考えですが、それは起こると思います)を使用して他のコードを破る可能性があるため、後でそのような機能を追加するのは簡単ではありません。

サイズが2,147,483,647を超える配列をインデックスする必要があるということではありませんが、なぜ署名番号を選択したのか理解できません。

コードで署名された番号を使用する方が普通だからでしょうか?

編集:これらのリンクを見つけました:

c/c ++における符号なしの反復の危険

署名された単語の長さとインデックス

edit2:OK、マシュー・フラシェンが投稿したスレッドからの他のいくつかの正当な理由:

  • Cのような言語であるため、歴史的な理由
  • cとの相互作用
役に立ちましたか?

解決

もちろん簡単に。あなたは好きですか 問題 署名されていないINTを使用してサイズの算術を実行しますか?

他のヒント

それは、0未満の値を無効なインデックスとして使用するという長い伝統にかもしれません。 string.indexof return -1などの方法要素が見つからない場合。したがって、返品値に署名する必要があります。インデックス消費者が署名されていない値を必要とする場合、a)チェックし、b)それを使用するために値をキャストする必要があります。署名されたインデックスを使用すると、チェックが必要です。

署名されていないCLSに準拠していません。

署名されていない数値の主な有用性は、小さい数からより大きな数値を構成するときに発生し、その逆も同様です。たとえば、接続から4つの署名されていないバイトを受信し、全体としてとられる価値を32ビットの整数と見なしたい場合、署名されていないタイプを使用して、単に言うことができるということを意味します。

  value = byte0 | (byte1*256) | (byte2*65536) | (byte3*16777216);

対照的に、バイトが署名された場合、上記のような式がより複雑になります。

最近設計された言語が、最も長い署名された整数タイプよりも短いすべてのタイプの符号なしのバージョンを含めないように設計された言語が本当に見られるかどうかはわかりません。 )最大の署名型タイプ内に完全に適合する操作は、デフォルトで実行されます そうである 彼らはそのタイプで動作していました。最大の署名型タイプの符号なしバージョンを含めると、言語仕様が複雑になります(どの操作が署名型タイプの範囲内に適合し、どの操作が署名されていないタイプの範囲内に適合する必要があるかを指定する必要があります)が、それ以外の場合は、言語を設計するのに問題ありません if (unsigned1 - unsigned2 > unsigned3) 「数値的に修正された」結果が得られます unsigned2 より大きい unsigned1 符号なしのラップアラウンドが必要な場合、明示的に指定します if ((Uint32)(unsigned1 - unsigned2) > unsigned3)]。そのような動作を指定した言語は、Cに存在する混乱(正当化可能、その履歴を考慮)、c#、またはvb.netよりも大きな改善になるでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top