在位移操作中使用size_t进行计数是否合适?

问题描述 投票:0回答:1

这个小问题,看似微不足道的问题,最近发生在我身上,但经过大量搜索之后,我什至找不到关于该主题的意见。仅引用循环和对象大小。

我知道人们喜欢示例,所以这里首先引起问题的示例:

uint64_t deltaSwap( const uint64_t b, const size_t delta, uint64_t mask )
{
    return b ^ mask ^ ( mask &=  b ^ b >> delta ) << delta;
}

一段时间以来,我一直在尝试对此进行优化,完全知道这不是编写正确代码的方法,尽管到目前为止,至少在GCC中,它给了我最好的结果,但是后来我想到了。如果您真的想学究,那么delta不应为size_t类型吗?

我从不真正了解何时使用size_t,所以我从没有真正使用过,但是如果我愿意的话,这不是正确的用法吗?

c bit-manipulation bitwise-operators bit-shift size-t
1个回答
1
投票

ISO/IEC 9899:1999部分6.5.7

如果右操作数的值为负或大于或等于提升后的左操作数的宽度,行为是不确定的。

这意味着您的情况是delta的要求是

0 <= delta < number of bits in the left operand
© www.soinside.com 2019 - 2024. All rights reserved.