繁体   English   中英

提取32位长的中间16位

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM