移位运算符 左移右移,与操作符 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。
原文地址:https://www.cnblogs.com/HelloQLQ/p/15508321.html