ホームページ バックエンド開発 PHPチュートリアル PHP はビット演算を使用して整数の加算、減算、乗算、除算を実装し、それらをテストします (コード例)

PHP はビット演算を使用して整数の加算、減算、乗算、除算を実装し、それらをテストします (コード例)

Aug 11, 2018 pm 04:52 PM
bit

この記事の内容は、PHP でビット演算を使用して整数の加算、減算、乗除を実装し、テストする方法 (コード例) に関するものです。一定の参考値があります。必要な友人が参照できると幸いです。役に立ちます。助けてください。

<?php
/**
 * Created by PhpStorm.
 * User: Mch
 * Date: 8/10/18
 * Time: 23:51
 * 只用位运算不用算数运算实现整数的 + - * /
 */
class Arithmetic {
    const MAX_INTEGER = 2147483647;
    const MIN_INTEGER = -2147483648;
    /**
     * @param int $a
     * @param int $b
     * @return int  $a + $b;
     */
    public static function add(int $a, int $b) : int {
        $sum = $a;
        while ($b) {
            $sum = $a ^ $b;       // 不考虑进位
            $b = ($a & $b) << 1;  //  只考虑进位
            $a = $sum;
        }
        return $sum;
    }

    /**
     * 相反数 <= 二进制表达取反+1(补码)
     * @param int $n
     * @return int
     */
    private static function negateNumber(int $n) : int {
        return self::add(~$n, 1);
    }

    /**
     * a-b = a + (-b)
     * @param int $a
     * @param int $b
     * @return int
     */
    public static function minus(int $a, int $b) : int {
        return self::add($a, self::negateNumber($b));
    }

    /**
     * @param int $a
     * @param int $b
     * @return int  $a * $b
     */
    public static function multiple(int $a, int $b) : int {
        $res = 0;
        while ($b) {
            if (($b & 1)) {
                $res = self::add($res, $a);
            }
            $a <<= 1;
            $b >>= 1;
        }
        return $res;
    }

    private static function isNegative(int $n) : bool {
        return $n < 0;
    }

    /**
     * a/b  a = MIN_INTEGER, b!=MIN_INTEGER ?
     * @param int $a
     * @param int $b
     * @return int
     */
    private static function p(int $a, int $b) : int {
        $x = self::isNegative($a) ? self::negateNumber($a) : $a;
        $y = self::isNegative($b) ? self::negateNumber($b) : $b;
        $res = 0;
        for ($i = 31; $i >-1; $i = self::minus($i, 1)) {
            if (($x >> $i)>=$y) {
                $res |= (1 << $i);
                $x = self::minus($x, $y<<$i);
            }
        }
        return self::isNegative($a) ^ self::isNegative($b) ? self::negateNumber($res):$res;
    }

    /**
     * @param int $a
     * @param int $b
     * @return int $a / $b
     */
    public static function pide(int $a, int $b) : int {
        if ($b === 0) {
            throw new RuntimeException("pisor is 0");
        }
        if ($a === self::MIN_INTEGER && $b === self::MIN_INTEGER) {
            return 1;
        } else if ($b === self::MIN_INTEGER) {
            return 0;
        } else if ($a === self::MIN_INTEGER) {
            $res = self::p(self::add($a, 1), $b);
            return self::add($res, self::p(self::minus($a, self::multiple($res, $b)), $b));
        } else {
            return self::p($a, $b);
        }
    }
}
ログイン後にコピー

TEST:

echo Arithmetic::add(1, 2).PHP_EOL;  // 3
echo Arithmetic::minus(10, 3).PHP_EOL;  // 7
echo Arithmetic::multiple(5, 3).PHP_EOL;  // 15
echo Arithmetic::pide(-2147483648, 1).PHP_EOL;  // -2147483648
echo Arithmetic::pide(-15, 3).PHP_EOL;  // -5
ログイン後にコピー

関連する推奨事項:

PHP と HTML フォームの間の単純な対話用のコード

# #phpHow HTML ファイルのクラスを生成するには? php

でHTMLファイルクラスを生成する方法

以上がPHP はビット演算を使用して整数の加算、減算、乗算、除算を実装し、それらをテストします (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

1 ビットは何バイトに相当します 1 ビットは何バイトに相当します Mar 09, 2023 pm 03:11 PM

1 ビットは 1 バイトの 8 分の 1 に相当します。 2 進数体系では、0 または 1 がそれ​​ぞれ 1 ビット (bit) であり、ビットはデータ記憶の最小単位であり、8 ビット (bit、略して b) ごとに 1 バイト (Byte) が構成されます。バイト) = 8 ビット」。ほとんどのコンピュータ システムでは、バイトは 8 ビット (ビット) 長のデータ単位であり、文字、数字、またはその他の文字を表すためにバイトが使用されます。

Redis ビット操作の使用方法 Redis ビット操作の使用方法 May 26, 2023 pm 02:14 PM

この記事の Redis テスト コードは次の環境に基づいています: オペレーティング システム: MacOS 64 ビット バージョン: Redis5.0.764bit 動作モード: スタンドアロン モード Redis ビット操作 reids ビット操作は、ビット配列操作およびビットマップとも呼ばれ、4 つのコマンドを提供します。 : SETBIT、GETBIT、BITCOUNT、および BITTOP バイナリ ビット配列を操作します。まず、一連の基本的な操作例を見てみましょう SETBIT 構文: SETBITkeyoffsetvalue は: コマンド キー オフセット 0/1 setbit コマンドは、指定されたオフセットのバイナリ ビット設定値をビット配列に書き込むために使用されます。オフセットは 0 からカウントを開始し、 1 または 0 の書き込みのみが許可されます。

1バイトは何ビットに相当します 1バイトは何ビットに相当します Mar 19, 2021 pm 02:52 PM

1バイトは8ビットに相当します。データの保存は「バイト」(Byte)単位で行われ、データ送信は主に「ビット」(ビット)単位で行われ、1ビットが0か1(つまり2進数)を表し、8ビット(ビット)ごとに0または1を表します。 ) バイトは情報の最小単位であるため、「1Byte=8bit」となります。

Linux でシステムが 32 ビットか 64 ビットかを確認するにはどうすればよいですか? Linux でシステムが 32 ビットか 64 ビットかを確認するにはどうすればよいですか? Mar 01, 2024 pm 07:34 PM

CentOS は、RHEL を起源とする Linux ディストリビューションであり、オープン ソース コードの規制に従ってコンパイルされています。さらに、RHEL との機能互換性が維持されており、ユーザーは著作権料を支払うことなく使用および変更できる無料のオープンソース オペレーティング システムです。では、CentOS は Linux の 32 ビットと 64 ビットを区別しますか? 詳細については、以下を参照してください。 CentOS は 32 ビットと 64 ビットを区別します! 主な違い: CentOS32 ビット システムは主に PC 用にリリースされます; CentOS64 ビット システムは主に大規模科学技術コンピューティングを目的としています; 64 ビット Linux システムは主に 64 ビット ハードウェア システムにインストールされます; 32 ビット

1バイトは何ビットに相当します 1バイトは何ビットに相当します Mar 02, 2023 pm 03:44 PM

1 バイトは 8 ビットに相当します。 2 進数体系では、0 または 1 がそれ​​ぞれ 1 ビット (bit) であり、ビットはデータ記憶の最小単位であり、8 ビット (bit、略して b) ごとに 1 バイト (Byte) が構成されます。バイト) = 8 ビット」。ほとんどのコンピュータ システムでは、バイトは 8 ビットのデータ単位であり、文字、数字、その他の文字を表すためにバイトが使用されます。

PIコインとは何ですか?どこで取引できますか?なぜそれが詐欺だと言う人がいるのですか? PIコインの使用は何ですか? PIコインとは何ですか?どこで取引できますか?なぜそれが詐欺だと言う人がいるのですか? PIコインの使用は何ですか? Mar 04, 2025 am 07:33 AM

PI COIN詳細分析:機会と課題と共存する暗号通貨であるPI COIN(π)は、2018年の誕生以来、ユニークな「モバイルマイニング」メカニズムで世界中で4700万人以上のユーザーを引き付けました。この記事では、基本的な情報、エコシステム、アプリケーションシナリオ、ピコインをめぐる論争について説明し、この物議を醸すデジタル資産を完全に理解するのに役立ちます。 PI COIN CORE情報中国語名:Pai Coin英語名:PI COIN、πコイン共通略語:π公式ウェブサイト:https://minepi.com/ Founder:Nicolas Kokkalis(Technical Head、Ph.D.、Stanford University)およびChengdiao

2025年のトップ10仮想通貨取引プラットフォーム:明確な選択 2025年のトップ10仮想通貨取引プラットフォーム:明確な選択 Feb 25, 2025 pm 12:12 PM

2025年のトップ10の仮想通貨プラットフォーム:1。ユーザーエクスペリエンスやその他の要因に最適です。

Linux C言語にはビットがありますか? Linux C言語にはビットがありますか? Mar 28, 2023 am 10:57 AM

Linux C言語にはビットがあります; マイコンC言語ではビットは新しいキーワードであり、「ビット変数」を定義するためによく使用されます; C言語でビット型データを定義する方法は、 1. sbitまたはbitで定義する; 2. (構造体の) ビット フィールドを通じて定義; 3. 組み合わせたビット演算子を通じて定義。

See all articles