这个小问题,看似微不足道的问题,最近发生在我身上,但经过大量搜索之后,我什至找不到关于该主题的意见。仅引用循环和对象大小。
我知道人们喜欢示例,所以这里首先引起问题的示例:
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
,所以我从没有真正使用过,但是如果我愿意的话,这不是正确的用法吗?
从ISO/IEC 9899:1999部分6.5.7
如果右操作数的值为负或大于或等于提升后的左操作数的宽度,行为是不确定的。
这意味着您的情况是delta
的要求是
0 <= delta < number of bits in the left operand