Maison développement back-end tutoriel php PHP utilise des opérations sur bits pour implémenter l'addition, la soustraction, la multiplication et la division d'entiers et les tester (exemple de code)

PHP utilise des opérations sur bits pour implémenter l'addition, la soustraction, la multiplication et la division d'entiers et les tester (exemple de code)

Aug 11, 2018 pm 04:52 PM
bit

Le contenu de cet article concerne PHP utilisant des opérations sur bits pour implémenter l'addition, la soustraction, la multiplication et la division d'entiers et les tests (exemples de code). J'espère que les amis dans le besoin pourront s'y référer. être utile pour vous aider.

<?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);
        }
    }
}
Copier après la connexion

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
Copier après la connexion

Recommandations associées :

Code pour une interaction simple entre les formulaires PHP et HTML

Comment php génère-t-il des classes pour les fichiers HTML ? Comment générer une classe de fichier html en php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

1 bit équivaut à combien d'octets 1 bit équivaut à combien d'octets Mar 09, 2023 pm 03:11 PM

1 bit équivaut à un huitième d'octet. Dans le système de nombres binaires, chaque 0 ou 1 est un bit (bit), et un bit est la plus petite unité de stockage de données ; tous les 8 bits (bit, abrégé en b) constituent un octet (Byte), donc "1 octet ( Octet) = 8 bits ». Dans la plupart des systèmes informatiques, un octet est une unité de données de 8 bits (bits). La plupart des ordinateurs utilisent un octet pour représenter un caractère, un nombre ou un autre caractère.

Comment utiliser les opérations de bits Redis Comment utiliser les opérations de bits Redis May 26, 2023 pm 02:14 PM

Le code de test Redis dans cet article est basé sur l'environnement suivant : Système d'exploitation : MacOS Version 64 bits : Redis5.0.764bit Mode de fonctionnement : mode autonome Opération de bits Redis L'opération de bits Reids est également appelée opération de tableau de bits et bitmap. Elle fournit quatre commandes. : SETBIT, GETBIT, BITCOUNT et BITTOP Pour manipuler des tableaux de bits binaires. Examinons d'abord une vague d'exemples d'opérations de base Syntaxe SETBIT : SETBITkeyoffsetvalue est : command key offset 0/1 La commande setbit est utilisée pour écrire la valeur de réglage des bits binaires du décalage spécifié dans le tableau de bits. Le décalage commence à compter de 0 à . n'est autorisé qu'à écrire 1 ou 0,

1 octet équivaut à combien de bits 1 octet équivaut à combien de bits Mar 19, 2021 pm 02:52 PM

1 octet est égal à 8 bits. Le stockage des données s'effectue en "octet" (Byte) comme unité, et la transmission des données se fait principalement en "bit" (bit) comme unité. Un bit représente un 0 ou un 1 (c'est-à-dire binaire), et tous les 8 bits (bit). ) forment un octet est la plus petite unité d'information, donc "1 octet = 8 bits".

Comment vérifier si le système est 32 bits ou 64 bits sous Linux ? Comment vérifier si le système est 32 bits ou 64 bits sous Linux ? Mar 01, 2024 pm 07:34 PM

CentOS est une distribution Linux issue de RHEL et compilée conformément aux réglementations du code open source. De plus, il maintient une compatibilité fonctionnelle avec RHEL et constitue un système d'exploitation gratuit et open source que les utilisateurs peuvent utiliser et modifier sans payer de droits d'auteur. CentOS fait-il donc la distinction entre 32 et 64 bits sous Linux ? Veuillez voir ci-dessous pour plus de détails. CentOS fait la distinction entre 32 bits et 64 bits ! Les principales différences : le système CentOS32bit est principalement destiné aux PC ; le système CentOS64bit est principalement destiné au calcul scientifique à grande échelle ; le système Linux 64 bits est principalement installé sur un système matériel 64 bits ;

1 octet équivaut à combien de bits 1 octet équivaut à combien de bits Mar 02, 2023 pm 03:44 PM

1 octet équivaut à 8 bits. Dans le système de nombres binaires, chaque 0 ou 1 est un bit (bit), et un bit est la plus petite unité de stockage de données ; tous les 8 bits (bit, abrégé en b) constituent un octet (Byte), donc "1 octet ( Octet) = 8 bits ». Dans la plupart des systèmes informatiques, un octet est une unité de données de 8 bits. La plupart des ordinateurs utilisent un octet pour représenter un caractère, un nombre ou un autre caractère.

Qu'est-ce que Pi Coin? Où puis-je échanger? Pourquoi certaines personnes disent-elles que c'est une arnaque? À quoi sert les pièces PI? Qu'est-ce que Pi Coin? Où puis-je échanger? Pourquoi certaines personnes disent-elles que c'est une arnaque? À quoi sert les pièces PI? Mar 04, 2025 am 07:33 AM

Analyse approfondie de Pi Coin: Pi Coin (π), une crypto-monnaie qui coexiste avec des opportunités et des défis, a attiré plus de 47 millions d'utilisateurs dans le monde depuis sa naissance en 2018 avec son mécanisme unique "Mobile Mining". Cet article explorera les informations de base, l'écosystème, les scénarios d'application et la controverse entourant Picoin, vous aidant à bien comprendre cet atout numérique controversé. PI COIN CORE INFORMATIONS CHINAGE Nom: Pai Coin Anglais Nom: Pi Coin, π Coin Common Abréviation: π Site officiel: https://minepi.com/ Fondateur: Nicolas Kokkalis (chef technique, Ph.D., Stanford University) et Chengdiao

Top 10 des plates-formes de trading de devises virtuelles en 2025: un choix clair Top 10 des plates-formes de trading de devises virtuelles en 2025: un choix clair Feb 25, 2025 pm 12:12 PM

Top Ten Virtual Devise Trading en 2025: 1. Binance; 2. OKX; Vous êtes mieux pour l'expérience utilisateur et d'autres facteurs.

Le langage Linux C a-t-il des bits ? Le langage Linux C a-t-il des bits ? Mar 28, 2023 am 10:57 AM

Le langage C Linux a bit ; dans le langage C du microcontrôleur, bit est un nouveau mot-clé, souvent utilisé pour définir une « variable bit » ; la méthode de définition des données de type bit en langage C est la suivante : 1. Définir via sbit ou bit ; Défini via des champs de bits (dans les structures) ; 3. Défini via des opérateurs de bits combinés.

See all articles