zoukankan      html  css  js  c++  java
  • 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向左移动两位

                      1.找出1的补码

                         00000000 00000000 00000000 00000001

                      1<<2

                        00000000 00000000 00000000 00000100

                      $a=1<<2=4

                 

             

  • 相关阅读:
    买书求如何获得折扣使价格最低
    团队开发NABC特点
    《梦断代码》读后感3
    结对开发5
    找水王问题续
    对搜狗输入法的评价
    团队项目之典型用户
    找水王问题
    电梯调度练习
    团队项目用户需求调研报告
  • 原文地址:https://www.cnblogs.com/tangyue/p/3724872.html
Copyright © 2011-2022 走看看