c++ - 提取 32 位长的中间 16 位

标签 c++ bit-manipulation

我正在阅读 Stroustrup 的 TCPPPL。它给出了一个提取 32 位长的 middle 16 位的函数示例,如下所示:

unsigned short middle(long a){ return (a>>8)&0xffff;}.

我的问题是:它不是提取last 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

关于c++ - 提取 32 位长的中间 16 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50523929/

相关文章:

c++ - 如何制作同步对象的字典?

c++ - 一个数字,因为它是质数部分

javascript - 非数字的位运算

c - 在c中使用位操作向右旋转

c++ - 位没有被重置?

c++ - memory_order_seq_cst 和 memory_order_release 的可能排序

C++ WIN32 在共享内存中创建整数和 bool 数组

c++ - 具有特殊字符的 QFileDialog 问题

c++ - 计算 64 位整数中的尾随零位是固有的吗?

c++ - 计算数组中有多少值与给定键互补的函数