关于C++流的一个问题
请问这个语句是什么意思?除了宏之外,我完全看不懂,拜托稍微说详细一点,谢谢了!#defineGETSTREAMSHORT(p)((unsignedchar)(p)[0]|...
请问这个语句是什么意思?除了宏之外,我完全看不懂,拜托稍微说详细一点,谢谢了!
#define GETSTREAMSHORT(p) ((unsigned char)(p)[0] | (unsigned char)(p)[1] << 8) 展开
#define GETSTREAMSHORT(p) ((unsigned char)(p)[0] | (unsigned char)(p)[1] << 8) 展开
1个回答
展开全部
简单的说这个宏就是定义一个按位或运算,结果是取得数组p第一个元素的低位8字节的值.。
GETSTREAMSHORT 这个是宏命名,可以随便取什么名字。
(unsigned char)(p)[0] 这个是将(p)[0]转化为unsigned char类型。(就是取低位的8字节)
(unsigned char)(p)[1] << 8这个是先将(p)[1]转化为unsigned char类型,然后左移8位。这样得到的一个全是0的字节。
由于或运算右边全是0,所以或得结果就是(unsigned char)(p)[0];
给你举几种情况的例子:
(1):
char a[]={3,4,5} ;
GETSTREAMSHORT(p) 的结果就是3;
(2)
char a[]={-3,4,5};
GETSTREAMSHORT(p) 的结果就是253;(这是将char转化为unsigned char类型)
(3)
int a={258,4,5};
GETSTREAMSHORT(p) 的结果就是2;(只取257的低位8字节)
还有什么问题再交流;
GETSTREAMSHORT 这个是宏命名,可以随便取什么名字。
(unsigned char)(p)[0] 这个是将(p)[0]转化为unsigned char类型。(就是取低位的8字节)
(unsigned char)(p)[1] << 8这个是先将(p)[1]转化为unsigned char类型,然后左移8位。这样得到的一个全是0的字节。
由于或运算右边全是0,所以或得结果就是(unsigned char)(p)[0];
给你举几种情况的例子:
(1):
char a[]={3,4,5} ;
GETSTREAMSHORT(p) 的结果就是3;
(2)
char a[]={-3,4,5};
GETSTREAMSHORT(p) 的结果就是253;(这是将char转化为unsigned char类型)
(3)
int a={258,4,5};
GETSTREAMSHORT(p) 的结果就是2;(只取257的低位8字节)
还有什么问题再交流;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询