찾다
백엔드 개발PHP 튜토리얼PHP는 비트 연산을 사용하여 정수의 덧셈, 뺄셈, 곱셈, 나눗셈을 구현하고 이를 테스트합니다(코드 예).

이 기사에서는 정수의 덧셈, 뺄셈, 곱셈, 나눗셈을 구현하고 이를 테스트하기 위해 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으로 문의하세요.
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等于多少bit1byte等于多少bitMar 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硬件系统上;  32bit

1字节等于多少bit1字节等于多少bitMar 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

핫 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 Hentai를 무료로 생성하십시오.

뜨거운 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기