[英]Extracting middle 16 bits of a 32 bit long
我正在阅读Stroustrup撰写的TCPPPL。 它给出了一个函数示例,它提取32位长的中间 16位,如下所示:
unsigned short middle(long a){ return (a>>8)&0xffff;}.
我的问题是:是不是提取了最后 16位? 告诉我,我错了。
它确实提取了中间的16位:
// a := 0b xxxx xxxx 1111 1111 1111 1111 xxxx xxxx
a>>8; // 0b 0000 0000 xxxx xxxx 1111 1111 1111 1111
&0xffff // 0b 0000 0000 0000 0000 1111 1111 1111 1111
a >> 8
将在值右移a
由8位。 低8位被遗忘,之前编号为31-8的位现在被移动(重新编号)为23-0。 最后,屏蔽掉更高的16位会留下15-0位,最初是在位置23-8之前(在移位之前)。 瞧。
a在按位和运算之前将右移8位( a>>8
)。
你注意到了>>8
部分吗? 它首先将参数右移8位。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.