首頁 後端開發 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表單之間實作簡單互動的程式碼

php如何產生HTML檔案的類別? php產生html檔案類別的方法

以上是php使用位元運算實現整數的加減乘除並測試(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

1bit等於多少位元組 1bit等於多少位元組 Mar 09, 2023 pm 03:11 PM

1bit等於八分之一個位元組。二進制數係統中,每個0或1就是一個位元(bit),位元是資料儲存的最小單位;每8個位元(bit,簡寫為b)組成一個位元組(Byte),因此「1位元組( Byte)=8位元(bit)」。在多數的電腦系統中,一個位元組是一個8位元(bit)長的資料單位,大多數的計算機都用一個位元組表示一個字元、數字或其他字元。

如何使用redis的bit位操作 如何使用redis的bit位操作 May 26, 2023 pm 02:14 PM

本文redis試驗程式碼基於以下環境:作業系統:MacOS64位元版本:Redis5.0.764bit運行模式:standalonemoderedis位元操作reids位元操作也叫位元組操作、bitmap,它提供了SETBIT、GETBIT、BITCOUNT、BITTOP四個指令用於操作二進位位數組。先來看一波基本操作範例SETBIT語法:SETBITkeyoffsetvalue即:指令key偏移量0/1setbit指令用於寫入位元組指定偏移量的二進位位元設定值,偏移量從0開始計數,且只允許寫入1或0,

1byte等於多少bit 1byte等於多少bit Mar 19, 2021 pm 02:52 PM

1byte等於8bit。資料儲存是以「位元組」(Byte)為單位,資料傳輸大多以「位元」(bit)為單位,一個位元代表一個0或1(即二進位),每8個位元(bit)組成一個位元組(Byte),是最小一級的資訊單位;因而,「1Byte=8bit」。

Linux如何查看系統是32位元還是64位元? Linux如何查看系統是32位元還是64位元? Mar 01, 2024 pm 07:34 PM

  CentOS是Linux的一種發行版,起源於RHEL,並依照開放原始碼的規定釋出原始碼進行編譯。而且它與RHEL在功能上保持相容性,是一個免費、開源的作業系統,用戶可以在不支付版權費用的情況下使用並進行修改。那麼Linux中CentOS區分32和64位嗎?具體請看下文。  CentOS區分32位元和64位元!  主要區別:  CentOS32bit系統主要針對PC而發布的;  CentOS64bit系統主要針對大型的科學計算;  64bitLinux系統主要安裝64bit系統主要針對大型的科學計算;  64bitLinux系統主要安裝64bit系統上1 2]

1位元組等於多少bit 1位元組等於多少bit Mar 02, 2023 pm 03:44 PM

1位元組等於8位元(bit)。二進制數係統中,每個0或1就是一個位元(bit),位元是資料儲存的最小單位;每8個位元(bit,簡寫為b)組成一個位元組(Byte),因此「1位元組( Byte)=8位元(bit)」。在多數的電腦系統中,一個位元組是一個8位元長的資料單位,大多數的計算機都用一個位元組表示一個字元、數字或其他字元。

Pi幣是什麼?哪裡能交易?為何有人說它是詐 騙? Pi幣有什麼用? Pi幣是什麼?哪裡能交易?為何有人說它是詐 騙? Pi幣有什麼用? Mar 04, 2025 am 07:33 AM

Pi幣深度解析:機遇與挑戰並存的加密貨幣Pi幣(π),這款備受關注的加密貨幣,自2018年誕生以來,便以其獨特的“手機挖礦”機制吸引了全球超過4700萬用戶。本文將深入探討Pi幣的基本信息、生態系統、應用場景以及圍繞其產生的爭議,幫助您全面了解這款備受爭議的數字資產。 Pi幣核心信息中文名稱:派幣英文名稱:Pi幣、π幣常用縮寫:π官網:https://minepi.com/創始人:NicolasKokkalis(技術負責人,斯坦福大學博士)和Chengdiao

Linux C語言有bit嗎 Linux C語言有bit嗎 Mar 28, 2023 am 10:57 AM

Linux C語言有bit;在單晶片C語言中,bit是新增的一個關鍵字,常用來定義一個「位元變數」;C語言定義bit型資料的方法是:1、透過sbit或bit定義;2、透過位元域(結構體中)定義;3、透過組合位元運算子定義。

2025年十大虛擬貨幣交易平台:一目了然的選擇 2025年十大虛擬貨幣交易平台:一目了然的選擇 Feb 25, 2025 pm 12:12 PM

2025年十大虛擬貨幣交易平台:1、幣安;2、OKX;3、gateio;4、bitget等等;在選擇交易所時,建議您根據自身需求和偏好,綜合考慮安全性、交易費用、用戶體驗等因素,選擇最適合您的平台。

See all articles