

コンピュータ内では2の補数が使われていますか1の補数が使われていますか  
もし、調べることができるとしたらどのように調べたら良いですか  
【追記】  
処理系によって異なる場合にもし1の補数が利用されているとしたらそれはなぜですか  
2の補数なら、利点はわかるのですが


CC BY-SA 3.0
2015-07-30T20:26:02.033
12855
2021-08-03T23:55:14.713
2015-07-30T21:47:08.853
10734
10734
question
情報理論
コンピュータ内では2の補数が使われていますか1の補数が使われていますか


例えばＣ言語でintの変数に負数を設定してその内部表現（ビット列）を表示することで  
２の補数が使われているか１の補数が使われているかは、判断できると思います。  
それで、Ｃ言語自体で表現の変換がされていることを疑う場合は、  
アセンブラ出力を見てそのような変換が行われているかどうかを調べるか、  
ＣＰＵ（その他）のマニュアルを調べる。


CC BY-SA 3.0
2015-07-30T20:55:05.467
12856
2015-07-30T20:55:05.467
5044
12855
answer


いまどきの CPU では２の補数系が使われているものがほとんど（というより全て）です。  
オイラは両手で足りない種類の CPU を使った経験がありますが、  
その全てが２の補数系を採用していました。  
(H8/H8S/H8SX/RX/8080/Z80/8086/80186/80286/x86/x64/68000/V850/MN101/MN103/RL/78K/78K0R)

２１世紀現在、２の補数でない CPU を使うことはまず絶対にないと考えて差し支えないです。  
１の補数な CPU を使うことがあったら貴重な経験がつめてラッキーと思ってください。  
２の補数系を使うメリットはご理解のとおりです。


CC BY-SA 3.0
2015-07-30T23:56:52.207
12858
2015-07-30T23:56:52.207
8589
12855
answer


C言語では

  * 2の補数表現
  * 1の補数表現
  * 符号ビット付き絶対値表現

を規定しています。しかし、現実的には存在しないであろうということでC++言語では[C++20にて符号付き整数型が2の補数表現であることを規定](https://cpprefjp.github.io/lang/cpp20/signed_integers_are_twos_complement.html)しました。その過程で[調査](http://www.open-
std.org/jtc1/sc22/wg21/docs/papers/2018/p0907r3.html#survey)が行われており、以下が挙げられていました。

>   * Ones' complement
>     * Many early computers, including the CDC 6600, the LINC, the PDP-1, and
> the UNIVAC 1107.
>     * Successors of the CDC 6600 continued to use ones' complement until the
> late 1980s.
>     * Descendants of the UNIVAC 1107, the UNIVAC 1100/2200 series, continue
> to do so, although ClearPath machines are a common platform that implement
> either the 1100/2200 architecture (the ClearPath IX series) or the Burroughs
> large systems architecture (the ClearPath NX series). Everything is common
> except the actual CPUs, which are implemented as ASICs. In addition to the
> IX (1100/2200) CPUs and the NX (Burroughs large systems) CPU, the
> architecture had Xeon (and briefly Itanium) CPUs. Unisys' goal was to
> provide an orderly transition for their 1100/2200 customers to a more modern
> architecture.
>   * Signed magnitude
>     * The IBM 700/7000 series scientific machines use sign/magnitude
> notation, except for the index registers which are two’s complement.
>

ざっくりとした印象ですが1980年代辺りまででしょうか？ この頃だと1バイトも8ビットとは限らないようですね。


CC BY-SA 4.0
2021-08-03T23:55:14.713
80579
2021-08-03T23:55:14.713
4236
12855
answer