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

转载于:https://www.cnblogs.com/wmm123/p/11227583.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将十制转换成二进制可以使用移位运算与运算来实现。 具体步骤如下: 1. 将十制数不断右移,直到为0,得到每一二进制数。 2. 将每一二进制数从右往左依次存储到一个数组中。 3. 对于两个二进制数相加,可以模拟竖式相加的过程。从右往左依次相加,如果相加的结果大于等于2,需要。 4. 对于的情况,可以使用与运算和异或运算来实现与运算可以得到需要异或运算可以得到不需要。 下面是一个示例代码: ```c #include <stdio.h> // 将十制转换成二进制 void decimalToBinary(int decimal, int binary[]) { int i = 0; while (decimal > 0) { binary[i] = decimal % 2; decimal /= 2; i++; } } // 将两个二进制数相加 void binaryAdd(int binary1[], int binary2[], int result[]) { int carry = 0; for (int i = 0; i < 32; i++) { int sum = binary1[i] + binary2[i] + carry; if (sum >= 2) { result[i] = sum - 2; carry = 1; } else { result[i] = sum; carry = 0; } } } // 输出二进制数 void printBinary(int binary[]) { int i; for (i = 31; i >= 0 && binary[i] == 0; i--); for (; i >= 0; i--) { printf("%d", binary[i]); } printf("\n"); } int main() { int decimal1 = 23; int decimal2 = 11; int binary1[32] = {0}; int binary2[32] = {0}; int result[32] = {0}; decimalToBinary(decimal1, binary1); decimalToBinary(decimal2, binary2); printf("Binary1: "); printBinary(binary1); printf("Binary2: "); printBinary(binary2); binaryAdd(binary1, binary2, result); printf("Result: "); printBinary(result); return 0; } ``` 输出结果如下: ``` Binary1: 10111 Binary2: 1011 Result: 100110 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值