专栏首页码农编程进阶笔记【图文】什么是php位运算与二进制

【图文】什么是php位运算与二进制

☼ 二进制

二进制就是用0和1来表示计算机语言的,0,1可以表示任意数,其逢二进一。

☼ 将十进制(即阿拉伯数字)转成二进制的计算步骤

二进制有三个重要概念

▶位运算

位运算符运算规则:

  • 按位与&:两位全为1,结果为1
  • 按位或|:两位有一个为1,结果为1
  • 按位异或^:两位中一个为0,一个为1,结果为1
  • 按位取反~:0取1,1取0

根据规则, 计算一个数的步骤:

例如计算:~2=?

 1.找出2的补码,【因为计算机运算是以补码的方式来进行运算的】
   2的原码:00000000 00000000 00000000 00000010
  //上面的字串从左往右数第一个数为0,所以其为正数,而正数有个原则:正数的原码=反码=补码,所以2的补码就是上面这串数字
2.再取反
  ~2取反:11111111 11111111 11111111 11111101
   //上面的字串得到的是补码,要想获得我们想要的结果就要将补码-->反码-->原码
 3.补码-->反码  [(补码-1)就是反码]
    反码:11111111 11111111 11111111 11111100
 4.反码-->原码  [符号位不变,也就是上面的字串从左往右数第一个数不变]
   原码:10000000 00000000 00000000 00000011=1*2^0+1*2^1=1+2=-3  //前面的红色1表示负数,所以结果为-3
/^表示次方,2^0表示2的0次方,从右往左开始计算:即1(上面这串数字从右往左数的第一个1)*2^0+1(上面这串数字从右往左数的第二个1)*2^1

例如:2&3=?

 1.找到2和3的补码
  2的补码: 00000000 00000000 00000000 00000010
  3的补码: 00000000 00000000 00000000 00000011
 //按位与&的运算:两位都为1,结果为1
  2&3= 00000000 00000000 00000000 00000010  // 前面的字串为补码,由于其第一个数字为0,所以其为正数,正数的补码=原码,所以结果为2  

终上:计算一个数的步骤就是原码-->反码-->补码-->根据位运算符计算得到补码-->反码-->原码-->再得到我们想要的值

▶ 位移运算

在php中位移运算符有两种:>>(右移)和<<(左移)

运算的规则:

右移:低位溢出,符号位不变,并用符号位补溢出的高位 [通俗点就是将最右边的数溢出,用最左边的数(符号数)补溢出的个数,放在最左边] 左移:符号位不变,低位补0 [通俗点就是将最左边的数溢出,用0来补溢出的个数,放在最右边]

根据规则,下面写几个案例:

A. $a=1>>2;//将1向右移动两位

 1.找出1的补码
   00000000 00000000 00000000 00000001
 1>>2
   00000000 00000000 00000000 00000000
 $a=1>>2=0

B. $a=1<<2;//将1向左移动两位

  00000000 00000000 00000000 00000001
1<<2
  00000000 00000000 00000000 00000100
$a=1<<2=4

本文分享自微信公众号 - 码农编程进阶笔记(lxw1844912514)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 『ACM-算法-lowbit』算法竞赛进阶指南--lowbit运算,找到二进制下所有是1的位

    风骨散人Chiam
  • 计算机程序的思维逻辑 (4) - 整数的二进制表示与位运算

    上节我们提到正整数相乘的结果居然出现了负数,要理解这个行为,我们需要看下整数在计算机内部的二进制表示。 十进制 要理解整数的二进制,我们先来看下熟悉的十进制。十...

    swiftma
  • 3分钟短文 | PHP位运算和逻辑运算,一个符号写两遍这么简单?

    我们经常在程序流程中进行逻辑判断,与或非,用的是炉火纯青,相信你也不少用。那么在PHP中,有两个操作符非常接近,就是 | 和 ||,那么他们有什么区别呢?

    程序员小助手
  • 位运算在 PHP 实际项目当中的高级运用

    位运算想必软件相关专业的同学应该非常清楚。非科班专业出身的也不要着急。今天博主就带着大家一起来回顾一下这些基础知识,同时也会讲位运算在 PHP 实际项目当中的高...

    猿哥
  • 一道看似简单的面试题

    这样看似简单的一个面试题, 实际牵出了很多基础知识,本章在为大家补习基础知识的情况下来解答这道题。先亮出答案

    CrazyCodes
  • PHP性能优化

    PHP 运行环境的性能考虑在 php 深入学习中需要逐步强化意识,并着手实现,其中对于性能分析的相关工具也需要有一定的掌握,比如压力测试工具 Apache Be...

    程序小工
  • PHP开发学习笔记(基础篇)

    筑梦师winston
  • 动手实践,Linux安装php-vld全过程实录

    答:vld 是 PECL extensions 扩展之一 ,也就是我们在 php.ini 中 extension=php_mysql.dll 这种,它的主要功能...

    架构精进之路
  • 3-5年的PHPer常见的面试题

    看到有很多,的总结一下,比较适合有一定经验的PHPer 平时喜欢哪些php书籍及博客?CSDN、虎嗅、猎云 js闭包是什么,原型链了不了解? for与forea...

    思梦php
  • 【小家java】Java中二进制与位运算(“^,&,>>,>>>”),使用移位算法写一个流水号生成器(订单号生成器)

    二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。

    YourBatman
  • PHP-FPM和Nginx的通信机制详解

    每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互相通信。PHP 文件在服...

    砸漏
  • Web前端开发职业技术要求规划

    今天,我演讲的题目是《Web前端开发职业技术要求规划》。这个世界有很多不平凡的人,也有更多平凡的人,你是属于哪一种呢?

    达达前端
  • 【技术创作101训练营】Web前端开发职业技术要求规划

    今天,我演讲的题目是《Web前端开发职业技术要求规划》。这个世界有很多不平凡的人,也有更多平凡的人,你是属于哪一种呢?

    达达前端
  • PHP中的pack和unpack函数

    PHP有两个重要的冷门函数: pack 和 unpack 。在网络编程,读写图像文件等场景,这两个函数几乎必不可少。鉴于文件读写/网络编程,或者说字节流处理的重...

    猿哥
  • PHP进阶学习之Geo的地图定位算法详解

    本文实例讲述了PHP进阶学习之Geo的地图定位算法。分享给大家供大家参考,具体如下:

    砸漏
  • 编码在网络安全中的应用和原理

    前言:现在的网站架构复杂,大多都有多个应用互相配合,不同应用之间往往需要数据交互,应用之间的编码不统一,编码自身的特性等都很有可能会被利用来绕过或配合一些策略,...

    企鹅号小编
  • PHP入门之数组

    之前几篇文章分别介绍了PHP的运算符,流程控制,函数。有兴趣的可以去看看。 PHP入门之类型与运算符 PHP入门之流程控制 PHP入门之函数 接下来简单...

    雪痕@
  • PHP 线程,进程和并发

    进程是什么?进程是正在执行的程序;进程是正在计算机上执行的程序实例;进程是能分配给处理器并由处理器执行的实体。 进程一般会包括指令集和系统资源集,这里的指令集是...

    猿哥
  • 【技术创作101训练营】PHP 也能开发物联网应用程序

    通过抓包的方式来介绍和学习 MQTT 协议,结合真实存在的网络字节,让 PHP 程序猿不存在学习压力,循序渐进的了解熟悉 MQTT 协议

    沈唁

扫码关注云+社区

领取腾讯云代金券