gpt4 book ai didi

c++ - 我该怎么做——像一个人一样快速地修改 2 的幂++ 2 的幂?

转载 作者:太空宇宙 更新时间:2023-11-04 15:24:00 25 4
gpt4 key购买 nike

我正在为应该表现得像循环数组的东西保留一个索引计数器。我强制大小为 2 的幂,因此使用 size_t MASK = size_ - 1 以便在像这样遍历时替换模数:

index_ = (++index_) & MASK;

但问题是,在我的情况下,我有时会意识到我可以重用我下次在这里分发的索引,所以当这种情况发生时,我有这样的事情:

if (canReuseLastUsedIndex())
--index_;

但是当最后一个 index_ 为零时这会崩溃,因为这不会环绕到 size_(即 MASK+1) .有没有一种方法可以让这种情况发生?或者非常快的东西? (即最好不必说:if (index_) --index_; else index_ = size_)

最佳答案

你可以做同样的事情并对其进行位掩码:

index_ = (index_ - 1) & MASK;

之所以可行,是因为无符号下溢在 C 和 C++ 中定义明确。

请注意,这行代码是未定义的行为:

index_ = (++index_) & MASK;

因为您在序列点之间(在预增量和赋值中)多次修改变量 index_

关于c++ - 我该怎么做——像一个人一样快速地修改 2 的幂++ 2 的幂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13314365/

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