基本运算符 与运算 和 左移操作符

接收到的16进制信息:data.MainData =

01-21-0f-07-07-03-00-08-09-01-07-07-07-06-03-05-06-08-00-00-00-00-00-00-00-00-00-01-00-00-00-00-01-7a-09-0a-0b-0c-64-00-95

var number = (data.MainData[0] & 0xff) << 8 | (data.MainData[1] & 0xff);
data.MainData[0]:01
0xff:1111 1111
&:二进制与计算,表示data.MainData[0]的2进制和16进制0xff的2进制进行与运算,
  与运算就是:上下两个都是1,则结果为1,否则为0
01的2进制: 0000 0001
0xff的2进制:1111 1111
结果: 0000 0001
<< 8:左移操作符,将0000 0001整体向左移动8位,空位补0
结果:0000 0000 = 0
但是:data.MainData[0] & 0xff 是表达式的值,结果已经是变量的值了
表达式是运算中的值:左移相当于乘,左移n位相当于乘2的n次方
所以:0000 0001 << 8 结果=256,如果表达式是0000 0001 <<= 8,就是变量的值,结果=0

同理:data.MainData[1] & 0xff
==            2      1
即         0010 0001
&           1111 1111
结果:  0010 0001 = 33

原文地址:https://www.cnblogs.com/wa502/p/14679936.html