Wie verwendet PHP Bitoperationen, um vier arithmetische Operationen zu implementieren? In diesem Artikel erfahren Sie, wie Sie Bitoperationen verwenden, um die vier arithmetischen Operationen (Addition, Subtraktion, Multiplikation und Division) in PHP zu implementieren.
Die grundlegendste Betriebseinheit eines Computers ist ein Byte. Ein Byte besteht aus 8 Bits und ein Bit kann nur eine 0 oder 1 speichern. Alle Daten im Computer werden binär gespeichert und verarbeitet, d. h. in der Kodierung von 1 und 0.
Dieses Mal versuche ich, vier arithmetische Operationen in PHP zu implementieren. Zuerst stelle ich einige grundlegende Konzepte vor:
Originalcode: Verwenden Sie das höchste Bit als Vorzeichenbit (0 bedeutet positiv, 1 bedeutet negativ) und andere digitale Bits stellen den absoluten Wert des Werts selbst dar. Wert
Einerkomplement: Das Einerkomplement einer positiven Zahl ist dasselbe wie der ursprüngliche Code, das Vorzeichenbit bleibt unverändert und die anderen Bits sind invertiert
Einerkomplement: Das Einserkomplement einer positiven Zahl ist das gleiche wie der Originalcode;
⒈ Addition
Es gibt nur 0 und 1 im Binärformat. Weder 0 + 0 noch 0 + 1 erfordern einen Übertrag, 1 + 1 jedoch. Verwenden Sie daher zunächst die Operation oder , um das Ergebnis der Addition der Bits zu erhalten, die keinen Übertrag erfordern. Führen Sie dann die Operationen von
und aus, und wenn die beiden hinzugefügten Bits beide 1 sind, ist das Ergebnis 1. Wenn das Ergebnis der UND-Operation größer als 0 ist, bedeutet dies, dass ein Übertrag erforderlich ist. Zu diesem Zeitpunkt wird das Ergebnis der UND-Operation um 1 Bit nach links verschoben Die Verschiebung wird mit dem Ergebnis der ODER-Operation kombiniert und der obige Operationsprozess wird wiederholt, bis das Ergebnis der UND-Operation lautet. Das Ergebnis ist 0. <?php
function add($summand, $addend)
{
$sum = $summand ^ $addend;
// 判断进位
$carry = $summand & $addend;
while ($carry <<= 1) {
$summand = $sum;
$addend = $carry;
$sum = $summand ^ $addend;
$carry = $summand & $addend;
}
return $sum;
}
Subtraktion kann man sich als Addition mit einem negativen Subtrahierer vorstellen, zum Beispiel kann man sich 2 - 1 als 2 + (-1) vorstellen. <?php
require 'addition.php';
function subtract($minuend, $subtrahend)
{
// 先求得减数的补码,然后求和
$subtrahend = add(~$subtrahend, 1);
return add($minuend, $subtrahend);
}
⒊ Multiplikation
Multiplikation kann auch als Variante der Addition betrachtet werden, beispielsweise kann m * n als Ergebnis der Addition von n m betrachtet werden. Es gibt jedoch eine schnellere Möglichkeit, die Multiplikation mithilfe von Bitoperationen zu implementieren. Beispiel: 3 * 10: Die binäre Darstellung von 3 ist 0011 und die binäre Darstellung von 10 ist 1010
————— ———————
0 0 0
0 0 1 1 0
0 0 0 0 0 0
0 0 1 1 0 0 0
—————————— ——
0 0 1 1 1 1 0
Wie aus der obigen Abbildung ersichtlich ist, lautet das Ergebnis der Multiplikationsberechnung: Wenn der Wert des Multiplikatorbits 1 ist, verschieben Sie den Multiplikanden um den entsprechenden Wert nach links Anzahl der Ziffern und schließlich das durch Verschieben dieser Bits nach links erhaltene Ergebnis. Addieren Sie das Endergebnis in Echtzeit.<?php require 'addition.php'; function multiply($multiplicand, $multiplicator) { // 判断符号位 $flag = ($multiplicand ^ $multiplicator) < 0 ? false : true; // 被乘数和乘数取绝对值 $multiplicand = $multiplicand < 0 ? add(~$multiplicand, 1) : $multiplicand; $multiplicator = $multiplicator < 0 ? add(~$multiplicator, 1) : $multiplicator; $product = 0; $multiplicator = decbin($multiplicator); $length = strlen($multiplicator); for ($i = 0; $i < $length; $i ++) { if ($multiplicator[$i]) { $product += $multiplicand << $length - $i - 1; } } if (! $flag) { $product = add(~$product, 1); } return $product; }Nach dem Login kopieren
⒋ Die Division
ähnelt der Multiplikation und gibt an, wie viele Teiler vom Dividenden abgezogen werden können. <?php
require 'addition.php';
function divide($dividend, $divisor)
{
// 判断符号位
$flag = ($dividend ^ $divisor) < 0 ? false : true;
// 取得被除数符号位
$dividend_flag = $dividend < 0 ? false : true;
// 取绝对值
$dividend = $dividend < 0 ? add(~$dividend, 1) : $dividend;
$divisor = $divisor < 0 ? add(~$divisor, 1) : $divisor;
$quotient = 0;
$remainder = 0;
if ($dividend < $divisor) {
// 被除数小于除数的情况
$remainder = $dividend;
return 'quotient = ' . $quotient . ' remainder = ' . $remainder;
}
while ($dividend >= $divisor) {
$i = 0;
$mul_divisor = $divisor;
while ($dividend >= ($mul_divisor << 1)) {
$i ++;
$mul_divisor <<= 1;
}
$dividend -= $mul_divisor;
$quotient += 1 << $i;
}
$remainder = $dividend;
if (! $flag) {
$quotient = add(~ $quotient, 1);
}
if (! $dividend_flag) {
$remainder = add(~$remainder, 1);
}
return 'quotient = ' . $quotient . ' remainder = ' . $remainder;
}
Die Addition zweier sehr großer Zahlen kann überlaufen; die Subtraktion einer positiven Zahl von einer negativen Zahl kann ebenfalls überlaufen; die Multiplikation zweier großer Zahlen kann ebenfalls überlaufen;
Empfohlenes Lernen: „PHP-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonEine kurze Diskussion darüber, wie man Bitoperationen verwendet, um Additions-, Subtraktions-, Multiplikations- und Divisionsoperationen in PHP zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!