我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP中怎么使用位运算实现加减乘除运算

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP中怎么使用位运算实现加减乘除运算

这篇文章主要介绍了PHP中怎么使用位运算实现加减乘除运算,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

计算机最基本的操作单元是字节,一个字节由8个位组成,一个位只能存储一个0或1。所有数据在计算机中都是采用二进制,即 1 和 0 的编码存储和运算。

这次尝试在 PHP 中使用位运算实现四则运算,首先介绍一些基本概念:

原码:将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值

反码:正数反码和原码一样;如果是负数,符号位不变,其余各位取反

补码:正数补码和原码一样;负数补码为反码加 1

计算机中的数使用 补码 的形式存储

⒈ 加法

二进制中只有 0 和 1,0 + 0、0 + 1 都不需要进位,但 1 + 1 则需要进位。所以,首先通过 抑或 运算得到不需要进位的那些位相加的结果。然后进行 运算,当相加的两位都为 1 时结果为 1。所以如果与运算的结果大于 0 说明需要进位,此时将与运算的结果按位左移 1 位,此时将左移的结果与抑或运算得到的结果重新进行上述的运算过程,直到与运算的结果为 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;    }

⒉ 减法

减法可以看作是减数为负数的加法,例如 2 - 1 可以看作是 2 + (-1)。

<?php    require 'addition.php';    function subtract($minuend, $subtrahend)    {        //  先求得减数的补码,然后求和        $subtrahend = add(~$subtrahend, 1);        return add($minuend, $subtrahend);    }

⒊ 乘法

乘法也可以看作是加法的变种,例如 m * n 可以看作是 n 个 m 相加的结果。但乘法使用位运算还有更快捷的实现方式。例如 3 * 10:3 的二进制表示为 0011,10 的二进制表示为 1010

0 0 1 1

×      1 0 1 0

————————————

0 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

由上图可以看出,乘法计算的结果为:当乘数的位的值为 1 时,将被乘数按位左移相应的位数,最后将这些按位左移后得到的结果相加及时最后的结果。

<?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;    }

⒋ 除法

同乘法类似,除法可以看作是被除数可以减去多少个除数。

<?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;    }

以上。

需要指出的是,上面的代码在实现过成功并没有考虑数据的溢出。两个很大的数相加可能会溢出;正数减负数也可能溢出;两个大数相乘也会溢出;任何数除以 0 都会溢出。

感谢你能够认真阅读完这篇文章,希望小编分享的“PHP中怎么使用位运算实现加减乘除运算”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP中怎么使用位运算实现加减乘除运算

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP中怎么使用位运算实现加减乘除运算

这篇文章主要介绍了PHP中怎么使用位运算实现加减乘除运算,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。计算机最基本的操作单元是字节,一个字节由8个位组成,一个位只能存储一个0
2023-06-20

php怎么实现加减乘除的运算

php实现加减乘除运算的方法:1、创建一个php示例文件;2、定义两个变量为“$x”和“$y”;3、通过“$x+$y”,“$x-$y”,“$x*$y”及“$x/$y”公式实现加减乘除运算;4、使用“echo”输出运算结果即可。
2023-05-14

Java使用位运算实现加减乘除详解

这篇文章主要为大家详细介绍了Java如何使用位运算实现加减乘除,文中的示例代码讲解详细,对我们深入了解Java有一定的帮助,感兴趣的可以了解一下
2023-05-19

Java怎么用位运算实现加减运算

这篇文章主要讲解了“Java怎么用位运算实现加减运算”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么用位运算实现加减运算”吧!思路分析先分析如何用位运算实现加法运算。示例假设a=2
2023-07-04

Java怎么用位运算实现乘法运算

这篇文章主要介绍了Java怎么用位运算实现乘法运算的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么用位运算实现乘法运算文章都会有所收获,下面我们一起来看看吧。十进制相乘例如,26 * 15,在进行乘法
2023-07-06

Java利用位运算实现加减运算详解

这篇文章主要为大家介绍了如何使用位运算来实现加减功能,也就是在整个运算过程中不能出现加减符号。文中的示例代码讲解详细,感兴趣的可以了解一下
2022-12-31

PHP如何在不使用加减乘除运算符号的情况下实现加法

这篇文章主要讲解了“PHP如何在不使用加减乘除运算符号的情况下实现加法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP如何在不使用加减乘除运算符号的情况下实现加法”吧!写一个函数,求两个
2023-06-20

php怎么实现乘法运算

在PHP中,可以利用“*”算术运算符实现乘法运算,该运算符用于计算前后两个数的乘积,语法为“乘数1*乘数2”。
2015-11-01

Android基于反射技术实现的加减乘除运算示例

本文实例讲述了Android基于反射技术实现的加减乘除运算。分享给大家供大家参考,具体如下: JAVA反射机制定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个
2022-06-06

php中加减乘除的计算公式怎么写

这篇“php中加减乘除的计算公式怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php中加减乘除的计算公式怎么写”文章吧
2023-06-29

怎么用PHP实现简单的加减乘除

这篇文章主要讲解了“怎么用PHP实现简单的加减乘除”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用PHP实现简单的加减乘除”吧!本文的重点就是如何创建一个PHP类来实现两个数间的加减乘除
2023-06-20

python中怎么利用numpy.dot实现点乘运算

python中怎么利用numpy.dot实现点乘运算,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。说明1、对于两个一维数组,计算这两个数组对应下标元素的乘积和(
2023-06-20

c++重载运算符怎么实现复数加减

要实现复数的加减操作符重载,可以重载加法运算符"+“和减法运算符”-"。以下是一个示例代码:#include class Complex {public:double real;double imag;Complex
c++重载运算符怎么实现复数加减
2024-03-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录