#define ReadU16BE(b) (((b)[0]<<8)|((b)[1])) 什么意思?

来源:百度知道 编辑:UC知道 时间:2024/09/23 20:49:36
define我当然明白,请详细解释后面位操作的内容,谢谢。

这是一个带参数的宏!

宏的名字是:ReadU16BE
它有一个参数(b)

ReadU16BE的值是由表达式(((b)[0]<<8)|((b)[1])) 计算得出来的

而表达式中的b是由宏调用时的参数ReadU16BE(b)传进来了

可以看出,一般情况下实参为数组首地址。

(((b)[0]<<8)|((b)[1])) 表达式的意思是:
将ReadU16BE参数传来的数组第一个元素((b)[0])左移8位((b)[0]<<8)的值,跟(b)[1]的值按位或运算。
最后,将这个或运算的值,返回给带参宏ReadU16BE(b)

举例说明:

#define ReadU16BE(b) (((b)[0]<<8)|((b)[1]))
……
int array[10];
array[0]=1;
array[1]=4;
int x=ReadU16BE(array);
……

那么执行过程是:将,数组array首地址传给参数b,再由表达式
(((b)[0]<<8)|((b)[1])) 计算结果。

(((b)[0]<<8)|((b)[1])) 计算过程如下:
1.array[0]<<8;//int型数值为1,内存表现形式:0000 0000 0000 0001 左移8位得到:0000 0001 0000 0000
2.(array[0]<<8)|((array)[1]);//array[1]为int型数值为4,内存表现形式:0000 0000 0000 0100,即0000 0001 0000 0000|0000 0000 0000 0100,结果为:0000 0001 0000 0100,如果是表示int型,表示数值为:520

因x 为int型,所以,x的值为520

希望能帮到你

用b代替 后面的, 没看清楚你怎么写