zoukankan      html  css  js  c++  java
  • 移位运算符 左移右移,与操作符 10进制数字 转高字节 低字节 数组

    移位运算符,是效率很高一种运算符,是用于二进制运算,我们编的程序最终都是二进制的,所以 在编码过程中,我们可以把移位运算符用于所有进制,但它是基于二进制的运算。
    在二进制数码中,位于更左边的数,所占的权值更高,也就是它所代表的数值越大,所以左移运算符,其实是把二进制数中的各个数位向左移动一位,最右边剩出来的末尾补零,
    这样就把这个数扩大成原来的一倍,也就相当于乘以2了,因为二进制的一个数的基数是2,你可以想想10进制的基数是10,把10往左移一位是不是就变成100了,也就是乘以了这个基数10,
    如果对二进制这种算法怀疑,可以算算试试。
     
    右移也就是把二进制各个数位位向右边推一位,最后就相当于除以2了。
     
    与操作符,是两个数 化为二进制位,右边对齐,左边补零,各列的数位两两相与,1与0得0, 1与1得1 ,0与1得0。
    1个16进制数,相当于4位的二进制数,因为4位二进制数刚好可以表示完一个16进制数。
     
    我们知道这些知识之后,就能把一个整数转换成高字节和低字节的数组了。
     
     int num = 86400;
                string numHex = "15180";
                byte b1 = (byte)((num >> 16) & 0xff);
                byte b2=(byte)((num >> 8) & 0xff);
                byte b3= (byte)(num & 0xff);
                Console.WriteLine(numHex);
                Console.WriteLine(b1 + "="+b1.ToString("x"));
                Console.WriteLine(b2 + "=" + b2.ToString("x"));
                Console.WriteLine(b3 + "=" + b3.ToString("x"));

     

    比如,这段程序,86400是十进制值,15180是16进制时的值。在这里 num>>16位,相当于把15180向右边推动4个位置,因为一个16进制位相当于4个二进制位,右移16,就16/4=4,
    也就是4个16进制位,也就是把5180抹掉 剩下1,然后1&0xff,0xff代表8个1 与00000001 一与最后就是1。
    剩下的都是同样的道理。
    当需要移动一位 一位的16进制码组成高低字节数组,就可以每次右移4位,与上0xf。
  • 相关阅读:
    POJ 3630 Phone List/POJ 1056 【字典树】
    HDU 1074 Doing Homework【状态压缩DP】
    POJ 1077 Eight【八数码问题】
    状态压缩 POJ 1185 炮兵阵地【状态压缩DP】
    POJ 1806 Manhattan 2025
    POJ 3667 Hotel【经典的线段树】
    状态压缩 POJ 3254 Corn Fields【dp 状态压缩】
    ZOJ 3468 Dice War【PD求概率】
    POJ 2479 Maximum sum【求两个不重叠的连续子串的最大和】
    POJ 3735 Training little cats【矩阵的快速求幂】
  • 原文地址:https://www.cnblogs.com/HelloQLQ/p/15508321.html
Copyright © 2011-2022 走看看