下面的语句是什么意思?
typedef unsigned long Datum; /* XXX sizeof(long) >= sizeof(void *) */
#define GET_1_BYTE(datum) (((Datum) (datum)) & 0x000000ff)
#define GET_2_BYTES(datum) (((Datum) (datum)) & 0x0000ffff)
#define GET_4_BYTES(datum) (((Datum) (datum)) & 0xffffffff)
#define SET_1_BYTE(value) (((Datum) (value)) & 0x000000ff)
#define SET_2_BYTES(value) (((Datum) (value)) & 0x0000ffff)
#define SET_4_BYTES(value) (((Datum) (value)) & 0xffffffff)
问题点数:20、回复次数:4Top
1 楼jamesfancy(▲) 边城狂人 <Java|C++] (★)回复于 2005-09-22 00:15:50 得分 10
typedef unsigned long Datum; /* XXX sizeof(long) >= sizeof(void *) */
// 把 Datum 定义为无符号长整形
#define GET_1_BYTE(datum) (((Datum) (datum)) & 0x000000ff)
// 将 datum 转换成无符号长整形并通过位运算保留最后8位,也就是一个字节,其余位均置0
#define GET_2_BYTES(datum) (((Datum) (datum)) & 0x0000ffff)
// 同上,不过保留的是两个字节
#define GET_4_BYTES(datum) (((Datum) (datum)) & 0xffffffff)
#define SET_1_BYTE(value) (((Datum) (value)) & 0x000000ff)
#define SET_2_BYTES(value) (((Datum) (value)) & 0x0000ffff)
#define SET_4_BYTES(value) (((Datum) (value)) & 0xffffffff)Top
2 楼jamesfancy(▲) 边城狂人 <Java|C++] (★)回复于 2005-09-22 00:17:08 得分 0
后三个好像有点问题,似乎应该用 | 代替 &,不过即使这样还是觉得有点问题,看你写这个代码的目的了。Top
3 楼dhy311(好好学习,天天向上)回复于 2005-09-22 09:18:15 得分 10
typedef unsigned long Datum; /* XXX sizeof(long) >= sizeof(void *) */
// 把 Datum 定义为无符号长整形
#define GET_1_BYTE(datum) (((Datum) (datum)) & 0x000000ff)
// 取得低8位
#define GET_2_BYTES(datum) (((Datum) (datum)) & 0x0000ffff)
// 同上,取得低16位
#define GET_4_BYTES(datum) (((Datum) (datum)) & 0xffffffff)
#define SET_1_BYTE(value) (((Datum) (value)) & 0x000000ff)
//实际上没有意思,效果跟get_1_byte一样,除非写成
#define SET_1_BYTE(value) ( value = \
((Datum) (value)) & 0x000000ff)
#define SET_2_BYTES(value) (((Datum) (value)) & 0x0000ffff)
#define SET_4_BYTES(value) (((Datum) (value)) & 0xffffffff)Top
4 楼SammyLan((基础决定你能走多远)--英语菜才是真的菜)回复于 2005-09-22 12:31:29 得分 0
MARK
Top




