現実の問題を補完するものなのか、それとも歴史的な問題なのか。

c history numerical

システムは、コンピュータ博物館以外の「現実の世界」に本当に存在しますか。 私は1970年代からコーディングしてきました、そして私はそのような獣に会ったことがないと確信しています。

そのようなシステム用のコードを実際に開発またはテストしている人はいますか? そうでなければ、そのようなことを心配するべきですか、それとも紙テープとパンチカードと一緒に Room 101に入れるべきですか?

  26  8


ベストアンサー

私はテレメトリ分野で働いています、そして、私たちの何人かの顧客にはまだ1の補数を使っている古いA / D変換器があります。 先日、補償するために1の補数から2の補数に変換するコードを書く必要がありました。

それで、はい、それはまだそこにあります(しかし、あなたはそれに頻繁に遭遇するつもりはありません)。

13


これはすべてあなたのルーツを知ることに帰着します。 はい、これは技術的には古い手法です。他の人がその質問で提案したことをして、モジュロ(%)演算子を使用して奇数または偶数を決定することになります。 しかし、1の補数(または2の補数)が何であるかを理解することは、常に知っておくべき良いことです。 あなたがそれらを使用したことがあるかどうかにかかわらず、あなたのCPUはこれらのことに常に対処しています。 そのため、この概念を理解しても害はありません。 現在では、現代のシステムがそれを可能にしているので、一般にそのようなことを心配する必要はまったくないので、ある意味でプログラミング101コースのトピックになっています。 しかし、実際には「現実の世界」でこれを使用している人もいることを覚えておく必要があります。 たとえば、一般的な考えに反して、_アセンブリを使い続ける人がいます!_多くはありませんが、CPUが生のC#とJavaを理解できるようになるまで、_someone_はまだこのことを理解する必要があります。

そして、あなたが自分自身が実際に二項演算を実行する必要があるところで何かをしているのを見つけるかもしれないとき、そして1の補数が便利になるかもしれないことをあなたは決して知りません。

12


RFC 791 p.14では、IPヘッダーチェックサムを次のように定義しています。

_
チェックサムフィールドは、ヘッダー内のすべての16ビットワードの1の補数合計の16ビット1の補数です。 チェックサムを計算する目的のために、チェックサムフィールドの値はゼロです。
_

そのため、実際の世界では、送信されるIPパケットごとに、1の補数が依然として*多く*使用されています。 🙂

12


私が80年代に使用したCDC Cyber​​ 18は1の補数のマシンでしたが、それは約30年前のことで、私はそれ以来見たことがありません(しかし、それは私が非PCで働いた最後の時間でした)。

10


私は自分の補数システムに遭遇したことがなく、あなたが持っている限り私はコーディングしてきました。

しかし、私は9の補数システム – HP-41c計算機の機械語 – に出会いました。 私はこれが時代遅れであると考えられることを認めるであろう、そして私は彼らがそれらのためにCコンパイラを持っていたとは思わない。

7


私たちは去年の1960年代の最後の1960年代の Honeyboxenを降りました。 それは2の補数でした。 これは、自分の補数を知っていること、または自分の補数を認識していることが悪いことであると言っているわけではありません。 ただ、あなたはおそらく彼らがあなたが職場でどれほどのコンピュータ考古学を持っていたとしても、あなたは今日自分の補完的な問題に遭遇することは決してないでしょう。

あなたが整数側で遭遇する可能性がより高い問題は Endian問題です(私はあなたを見ていますhttp://en.wikipedia.org/wiki/ PDP-11 [PDP])。 また、あなたはもっと「現実の世界」に出くわすでしょう。 今日) floating point 形式よりも整数形式になります。

6


おかしなことに、人々は同じ質問を comp.std.cで1993年に尋ねました、そして_nobodyはその人の補完的なマシンを指摘することができませんでした当時使用されていました。

そうです、私たちは自信を持って自分の補数が私たちの歴史の暗い隅に属していて、事実上死んでいて、もう心配ではないと言うことができると思います。

5


見つけることにした。 Unisys ClearPathシステムには* ANSI * Cコンパイラがあります(はい、それらは “American National Standard C”と呼ばれています。これについては、PDFドキュメントでも2013年に最後に更新されました)。 ドキュメントはhttp://public.support.unisys.com/framework/publicterms.aspx?returnurl=%2f2200%2fdocs%2fcp14.0%2fpdf%2f78310422-011.pdf[online];で入手できます。

符号付き型はすべて、次のような性質を持つ、1の補数表現を使用しています。

Type                 | Bits | Range
---------------------+------+-----------------
signed char          |   9  |  -2⁸+1 ...  2⁸-1
signed short         |  18  | -2¹⁷+1 ... 2¹⁷-1
signed int           |  36  | -2³⁵+1 ... 2³⁵-1
signed long int      |  36  | -2³⁵+1 ... 2³⁵-1
signed long long int |  72  | -2⁷¹+1 ... 2⁷¹-1

注目すべきことに、それはまたデフォルトで、 0から…​の範囲である unsigned int`と `unsigned long`の不適合をサポートします。 2³6 – 2`しかし、 `0 …​に変更することができます プラグマで2 36 – 1 `。

5


_
現実の問題を補完するものなのか、それとも歴史的な問題なのか。
_

はい、それはまだ使いました。 最新のIntelプロセッサでも使用されています。 Intel®64およびIA-32アーキテクチャソフトウェア開発者向けマニュアル 2A、3ページから8:

__
* 3.1.1.8説明セクション *

各命令は、いくつかの情報セクションで記述されます。 「説明」では、命令の目的と必要なオペランドについて詳しく説明します。

説明セクションで使用される可能性がある用語の概要
* レガシーSSE:SSE、SSE2、SSE3、SSSE3、SSE4、AESNI、PCLMULQDQを指します
XMMレジスタを参照し、VEXプレフィックスなしでエンコードされた将来の命令セット。
* VEX.vvvv ソースまたはデスティネーションレジスタを指定するVEXビットフィールド
(1の補数形式)。
* rm_field:ModR / M r / mフィールドおよび任意のREX.Bの省略形
* reg_field:ModR / M regフィールドおよび任意のREX.Rの省略形
__

1


タイトルとURLをコピーしました