Heim  >  Artikel  >  Warum werden negative Zahlen in Computern im Zweierkomplement gespeichert?

Warum werden negative Zahlen in Computern im Zweierkomplement gespeichert?

青灯夜游
青灯夜游Original
2020-12-08 10:34:4813947Durchsuche

Die Verwendung des Zweierkomplementspeichers für negative Zahlen in Computern kann die grundlegenden Rechenschaltungen des Computers vereinfachen, sodass Addition und Subtraktion nur mit Additionsschaltungen implementiert werden müssen und Addition anstelle von Subtraktion verwendet wird. Das Komplement ist der kleinste positive kongruente Rest einer negativen Zahl, sodass das Addieren einer negativen Zahl und das Subtrahieren einer positiven Zahl beide durch Addieren eines Komplements dargestellt werden können.

Warum werden negative Zahlen in Computern im Zweierkomplement gespeichert?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, Dell G3-Computer.

1. Einführung

Wissen Sie, wie ganze Zahlen in Computern gespeichert werden? Ist es das Vorzeichenbit plus das Wertbit? Werden die Wertbits im normalen Binärformat gespeichert?

Wenn Sie die letzten beiden Fragen mit „Ja“ beantworten, bedeutet dies, dass bei der Speicherung im 3-Bit-Binärformat und dem Vorzeichenbit 0 für positiv und 1 für negativ steht, 1 als 001, -1 gespeichert wird Es wird als 101 gespeichert. Leider ist dies nicht der Fall. Computer speichern ganze Zahlen in der Form eines Zweierkomplements statt in der natürlich aussehenden Form. Obwohl das Zweierkomplement auch durch das Vorzeichenbit plus das Wertbit dargestellt wird, sind die Ausdrucksregeln unterschiedlich: 1 wird als 001 gespeichert, -1 wird als 111 gespeichert. 001,-1会存储成101。可惜事实不是这样,计算机中是用补码的形式而不是刚刚那种看上去很自然的形式存储整数,补码虽然也是用符号位加值位来表示,但表示的规则不太一样:1会存成001,-1会存成111

如果三个问题你都回答对了,你知道计算机中整数以补码的形式存储,但你知道为什么要用这种形式吗?以及「正数的补码等于原码;负数的补码等于反码加1,而反码等于原码符号位不变,其余各位取反」这样的补码到底意味着什么?(假设你不知道,请接着往下看吧 XD)

先看使用补码的目的,然后忘掉上面那个补码定义,跟我从这个目的开始,一步步探索补码的本质。
目的:为了简化计算机基本运算电路,使加减法都只需要通过加法电路实现,也就是让减去一个正数或加上一个负数这样的运算可以用加上一个正数来代替。于是改变负数存储的形式,存储成一种可以直接当成正数来相加的形式,这种形式就是补码。(正数不用变,所以接下来的讨论中一般略去正数)

2.补码是怎么把减法变成加法的?

2.1.用时钟理解减法变加法

这是一个身边的例子,当你校对时钟的时候,假设发现钟是6点,但实际上现在才2点,也就是它走快了4个小时,你可以有两种方法进行校正,一种是逆时针拨回4个小时到2点,另一种是顺时针拨6个小时到12点然后再拨2小时,也就是顺时针拨8个小时到2点。所以对于时钟的表盘来说,设-N表示逆时针拨N个小时,N表示顺时针拨动N个小时,那么-4 = +8,同样还会有 -1 = +11-5 = +7,甚至也可以 -4 = +8 = +20 = +32 = -16...

这里边隐藏了什么规律?其实在数学中,-4、+8、+20、+32、-16可以归为符合某个条件的同一类数字 —— 对于模12同余

中文维基上对于模和同余的定义是:两个整数a、b,若它们除以正整数m所得的余数相等,则称a、b对于模m同余。

而在一个可溢出计数系统中,把计数系统容量作为模,那么所有对此模同余的数在此计数系统中都会有同样的表示,而且运算等价。
比如上面例子中的时钟表盘就是一个可溢出计数系统,模为12,所以-4、+8、+20、+32、-16这些对模12同余的数在时钟表盘上的表示是一样的,而且对时针做这些操作的结果也是一样的,都会拨到同样的位置。

一个n位二进制构成的计数系统,因为会舍弃溢出的高位,所以也是一个可溢出的计数系统,它的模为(2^n) 。(从0数到(2^n -1),再多就溢出)
由此可以推理,在一个3位二进制构成的模为8的计数系统中,-2,-10,6,14

Wenn Sie alle drei Fragen richtig beantwortet haben, wissen Sie, dass ganze Zahlen in Computern im Zweierkomplementformat gespeichert werden, aber wissen Sie, warum dieses Format verwendet wird? Und

"Das Komplement einer positiven Zahl ist gleich dem Originalcode; das Komplement einer negativen Zahl ist gleich dem Komplement plus 1, und das Komplement ist gleich dem Vorzeichenbit des Originalcodes, und die übrigen Bits sind unverändert invertiert.“

Was bedeutet eine solche Ergänzung? (Wenn Sie es nicht wissen, lesen Sie bitte weiter.)

Lassen Sie uns zunächst den Zweck der Verwendung von Komplementcodes betrachten und dann die obige Definition von Komplementcodes vergessen. Folgen Sie mir ausgehend von diesem Zweck und die Komplementierung Schritt für Schritt erforschen.
Zweck: Um die grundlegende Computeroperationsschaltung zu vereinfachen, müssen Addition und Subtraktion nur über die Additionsschaltung implementiert werden, d. h. es können eine positive Zahl subtrahiert oder eine negative Zahl addiert werden durch

plus eine positive Zahl stattdessen. Daher wird die Speicherform negativer Zahlen geändert und in einer Form gespeichert, die direkt als positive Zahlen hinzugefügt werden kann. Diese Form ist der Komplementcode. (Positive Zahlen müssen nicht geändert werden, daher werden positive Zahlen in der folgenden Diskussion im Allgemeinen weggelassen)

2 Wie wandelt der Komplementcode die Subtraktion in die Addition um?

2.1. Verwenden Sie die Uhr, um die Subtraktion und Addition um 2 Uhr zu verstehen. Das heißt, sie geht 4 Stunden schneller. Sie können sie auf zwei Arten korrigieren. Die andere besteht darin, sie 6 Stunden im Uhrzeigersinn auf 12 Uhr zu drehen und dann weitere 2 Stunden zu wählen, d. h. 8 Stunden im Uhrzeigersinn auf 2 Uhr zu drehen. Wenn also für das Zifferblatt der Uhr -N das Drehen um N Stunden gegen den Uhrzeigersinn und N das Drehen um N Stunden im Uhrzeigersinn bedeutet, dann ist -4 = +8 , es wird auch -1 = +11, -5 = +7 und sogar -4 = +8 = + 20 = +32 = -16 geben ...

Welche Regeln verbergen sich hier? Tatsächlich können -4, +8, +20, +32, -16 in der Mathematik als Zahlen desselben Typs klassifiziert werden, die bestimmte Bedingungen erfüllen –

für Kongruenz Modulo 12

. 🎜🎜

Die Definition von Modul und Kongruenz im chinesischen Wiki lautet: zwei ganze Zahlen a und b, wenn die Reste, die man durch Division durch eine positive ganze Zahl m erhält, gleich sind, dann sagt man a und b kongruent modulo m sein. 🎜🎜

Wenn in einem überlaufbaren Zählsystem die Kapazität des Zählsystems als Modulo verwendet wird, dann haben alle Zahlen, die mit diesem Modul kongruent sind, in diesem Zählsystem die gleiche Darstellung, und die Operationen werden gleichwertig sein.
Beispielsweise ist das Zifferblatt im obigen Beispiel ein Überlaufzählsystem, Modulo 12, sodass -4, +8, +20, +32, -16 mit Modulo 12 kongruent sind Die auf dem Zifferblatt der Uhr angezeigten Zahlen sind dieselben, und auch die Ergebnisse dieser Vorgänge am Stundenzeiger sind dieselben, sie werden alle auf dieselbe Position eingestellt. 🎜

Ein Zählsystem, das aus n-Bit-Binärdateien besteht. Da die übergelaufenen hohen Bits verworfen werden, ist es auch ein überlauffähiges Zählsystem und sein Modul beträgt (2^n). (Zählen von 0 bis (2^n -1), alle anderen werden überlaufen)
Daraus kann geschlossen werden, dass in einem 3-Bit-Binärzählsystem Modulo 8, -2, -10 , 6, 14 kann durch dieselbe Binärzahl dargestellt werden. Wenn Sie 10 subtrahieren und gleichzeitig 14 addieren, erhalten Sie das gleiche Ergebnis. 🎜🎜🎜🎜2.2. Führe zum Komplementcode🎜🎜🎜🎜Solange der Komplementcode der positive kongruente Rest einer negativen Zahl ist, können wir den gleichen Effekt erzielen wie dieser positive kongruente Komplementcode Hinzufügen einer weiteren negativen Zahl🎜. Für eine negative Zahl gibt es unzählige positive Kongruenzen, die die Bedingungen erfüllen. Um unnötige Operationen zu reduzieren, kann angegeben werden, dass das Komplement die kleinste positive Zahl unter ihnen ist. 🎜🎜Vielleicht wird es Komplementcode genannt, weil das Finden des Komplementcodes über den Originalcode eine komplementäre Modulo-Operation ist. 🎜🎜🎜Beachten Sie, dass die Komplementcodes hier alle speziell von mir markiert sind, da dies nicht die tatsächliche Komplementform ist, die im Computer gespeichert ist. Sie sollte Komplementnummer heißen, aber glauben Sie mir, sie kommt sehr nahe

3. Perfektionieren Sie den Komplementcode

3.1 Es gibt immer noch einige Probleme mit dieser Komplementcode-Darstellung

Durch die Konvertierung in den Komplementcode wird das Subtrahieren einer Zahl sehr gut Aber es gibt ein offensichtliches Problem: Das Symbol der Zahl selbst geht verloren.
Beispielsweise stellt eine dreistellige Binärzahl normalerweise 0~7 dar. Mit der Komplementmethode kann sie die Operation von -8~-1 ersetzen, aber nicht wirklich - 8~-1, weil Sie nicht wissen, ob es sich um eine positive oder negative Zahl handelt. 0~7,使用补码法它能代替-8~-1的运算,但它不能真正表示-8~-1,因为你不知道它到底是正数还是负数。
我们把负数转换成了一种在运算中更让计算机喜欢的形式,但它却丢失了自己本身作为数的信息。

怎么解决这个问题,可能有人很快就拍脑袋:那就加一位来表示正负得了。但这样的话运算时怎么办,从第二位开始算么?那进位去位的时候是不是也需要特别注意一下不要影响到符号位?你会发现这个问题并不是那么简单。

3.2.怎么完善 补码

不知道大牛是怎么想到的,问题解决得非常完美:

  • 在保持补码特性的前提下 (也就是减一个数还是照样变成加一个数)
  • 增加正负的表示 (能真正表示-8~-1 Wir haben negative Zahlen in eine Form umgewandelt, die für Computer in Berechnungen angenehmer ist, aber sie haben die Informationen über sich selbst als Zahl verloren.
  • Wie löst man dieses Problem? Manche Leute schlagen sich vielleicht schnell den Kopf: Fügen Sie dann eine Ziffer hinzu, um positiv oder negativ anzuzeigen. Aber was soll ich in diesem Fall bei der Berechnung tun? Soll ich ab der zweiten Ziffer beginnen? Müssen wir bei der Ausführung von Bits besonders darauf achten, dass das Vorzeichenbit nicht beeinträchtigt wird? Sie werden feststellen, dass das Problem nicht so einfach ist.

  • 3.2. Wie man den Komplementcode verbessert

Ich weiß nicht, wie Daniel darauf gekommen ist, aber das Problem wurde perfekt gelöst:


  • Unter Beibehaltung des Komplementcodes Unter der Prämisse der Merkmale (das heißt, das Subtrahieren einer Zahl wird immer noch zum Addieren einer Zahl)
  • Erhöhen Sie den Ausdruck von Positiv und Negativ (kann -8 wirklich ausdrücken). ~-1, Schauen Sie sich einfach an, ob das Vorzeichenbit 0 oder 1 ist)
  • Sie können die Operation auch ohne Unterscheidung des Vorzeichenbits durchführen, indem Sie das Vorzeichenbit direkt als Wertbit für die Berechnung und das Vorzeichen von verwenden Das Ergebnis entspricht natürlich diesem Vorzeichenbit (auch Das heißt, der Übertrag des Vorzeichenbits und der Übertrag des Wertbits werden natürlich vernünftig sein)
    Und die Lösung ist wirklich dumm, überraschend einfach, so ist es an den Sie zuvor gedacht haben:

    Fügen Sie eine Ziffer hinzu, um positiv und negativ darzustellen.

    Die spezifische Methode ist

    : Fügen Sie dem oberen Bit auf der linken Seite ein Vorzeichenbit hinzu, zusammen mit dem Pseudo-Komplementcode, den wir zuvor abgeleitet haben, bildet es einen wirklich perfekten

    Komplementcode
      .
    • Erzielter Effekt: Durch Lesen des Vorzeichenbits können Sie das Vorzeichen der Zahl ermitteln. Gleichzeitig ist das Vorzeichenbit wie das Wertbit an der Additionsoperation an der Operation beteiligt.
    • 4. Zum Schluss
    • Zusammenfassen
    Der Zweck der Verwendung von Komplementcode: Vereinfachen Sie die grundlegende Rechenschaltung des Computers, sodass Addition und Subtraktion nur durch die Additionsschaltung implementiert werden müssen, und verwenden Sie stattdessen die Addition Subtraktion.

    Warum der Komplementcode diesen Zweck erreichen kann

    : n-Bit-Binärdateien können ein überlauffähiges Zählsystem bilden. In einem solchen System wird die Kapazität des Zählsystems als Modul und alle Zahlen verwendet, die mit diesem Modul übereinstimmen werden in diesem Zählsystem die gleiche Darstellung haben und die Operationen sind äquivalent. Das Komplement ist der kleinste positive kongruente Rest einer negativen Zahl, sodass das Addieren einer negativen Zahl und das Subtrahieren einer positiven Zahl beide durch Addieren eines Komplements dargestellt werden können. 🎜🎜🎜So berechnen Sie das Komplement🎜: Das Komplement einer positiven Zahl ist sich selbst; für eine negative Zahl ermitteln Sie den kleinsten positiven kongruenten Rest (Modulo ist die Kapazität des Wertbits) und fügen ihn in das Wertbit ein Vorzeichenposition auf 1 setzen, um das Komplement der negativen Zahl zu erhalten. 🎜🎜🎜Wenn Sie weitere verwandte Artikel lesen möchten, besuchen Sie bitte die 🎜Chinesische PHP-Website🎜! ! 🎜

    Das obige ist der detaillierte Inhalt vonWarum werden negative Zahlen in Computern im Zweierkomplement gespeichert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn