gpt4 book ai didi

c++ - 轮类作业

转载 作者:行者123 更新时间:2023-11-28 01:13:34 24 4
gpt4 key购买 nike

我看到了其中一位 stackoverflower 发布的以下内容,这让我有点目瞪口呆。

谁能解释一下下面代码片段中的移位操作:

std::vector<bool> a;
a.push_back(true);
a.push_back(false);
//...
for (auto it = a.begin(); it != a.end();) // see 0x for meaning of auto
{
unsigned b = 0;
for (int i = 0; i < 8*sizeof(b); ++i)
{
b |= (*it & 1) << (8*sizeof(b) - 1 - i);
++it;
}
// flush 'b'
}

最佳答案

8 * sizeof(b) 是可以存储在“b”中的位数(它是一个无符号整数,即通常为 32 或 64 位)。

代码所做的是将 vector “a”中的 bool 值打包成“b”中的位。

如果 *it 处的 bool 值是 TRUE,“*it & 1”求值为 1,否则为 0。然后该位左移 32 位减 1 减去索引 'i',即从零左移到 31 位.这意味着现在 'a' 的第一个元素将控制 'b' 上的最高有效位(左移 31),第二个元素将控制 'b' 上的第二个最高有效位(左移 30)等。请注意,在 C 中移位是算术运算,即无论字节或位顺序如何,x << 1 始终是 x * 2。

因此,例如,如果您的 vector 具有第一个和第 30 个元素集,则“b”应该在一天结束时包含二进制数 10000000 00000000 00000000 00000100。

关于c++ - 轮类作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/578791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com