32

C で奇数/偶数を決定することについて別の質問があり、慣用的な (x & 1) アプローチは、C 標準で許可されている補数ベースのシステムでは壊れていると正しくフラグ付けされました。

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

そのようなシステムのコードを実際に開発またはテストしている人はいますか? そうじゃないならそんなこと気にするか、紙テープやパンチカードと一緒に101号室に入れるか……。

4

9 に答える 9

15

私はテレメトリ分野で働いており、一部の顧客はまだ 1 の補数を使用している古いアナログ - デジタル コンバーターを使用しています。先日、これを補うために 1 の補数から 2 の補数に変換するコードを書かなければなりませんでした。

はい、まだそこにあります (しかし、頻繁に遭遇することはありません)。

于 2008-10-02T11:47:57.233 に答える
13

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

実際に 2 進数の計算を実行する必要があり、1 の補数が役立つ可能性がある場所で、いつ自分が何かをしていることに気付くかはわかりません。

于 2008-10-02T11:32:00.157 に答える
10

80年に使用したCDCCyber​​18は1の補数のマシンでしたが、それは30年近く前のことで、それ以来見ていません(ただし、PC以外で作業したのはこれが最後でした)。

于 2008-10-09T08:00:03.347 に答える
10

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

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

そのため、実際の世界では、送信されるすべての IP パケットで、1 の補数がまだ頻繁に使用されています。:)

于 2009-12-26T06:41:46.157 に答える
7

私は 1 の補数システムに遭遇したことがなく、あなたと同じくらいコーディングを続けてきました。

しかし、HP-41c 計算機の機械語である 9 の補数システムに遭遇しました。これが時代遅れと見なされる可能性があることは認めます。また、それらの C コンパイラがあったことはないと思います。

于 2008-10-02T11:30:34.887 に答える
6

最後の 1960 年代のHoneyboxenを昨年のどこかで降ろしたので、現場で最も古いマシンになりました。2の補数でした。これは、自分の補体を知っている、または認識していることが悪いことだと言っているわけではありません. ただ、仕事でコンピュータ考古学をどれだけやらせても、今日、補数の問題に遭遇することはおそらくないでしょう。

整数側で発生する可能性が高い問題は、エンディアンの問題です (私はPDPを見ています)。また、整数形式よりも浮動 小数点 形式の方がより多くの「現実世界」(つまり、今日) の問題に遭遇します。

于 2008-10-02T11:36:41.300 に答える
0

補数は現実世界の問題ですか、それとも単に歴史的な問題ですか?

はい、まだ使用されていました。最新の Intel プロセッサでも使用されています。Intel® 64 and IA-32 Architectures Software Developer's Manual 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 の省略形

于 2015-08-18T23:46:25.777 に答える