大佬教程收集整理的这篇文章主要介绍了c – 最快的方式来生成一个从i位置开始的n个面具,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
template <class UIntType> constexpr T make_mask(std::size_t pos,std::size_t len) { // Body of the function } // Call of the function auto mask = make_mask<uint32_t>(4,10); // mask = 00000000 00000000 00111111 11110000 // (in binary with MSB on the left and LSB on the right)
((UIntType(1) << len) - UIntType(1)) << pos
如果len可能≥UIntType中的位数,请通过测试避免未定义行为:
(((len < std::numeric_limits<UIntType>::digits) ? UIntType(1)<<len : 0) - UIntType(1)) << pos
(如果pos也可能是≥std :: numeric_limits< UIntType> :: digits,则需要进行另一个三进制操作测试.)
你也可以使用:
(UIntType(1)<<(len>>1)<<((len+1)>>1) - UIntType(1)) << pos
这避免了三个额外的班次运算符的三元操作;我怀疑是否会更快,但仔细的基准测试是必要的,以确定.
以上是大佬教程为你收集整理的c – 最快的方式来生成一个从i位置开始的n个面具全部内容,希望文章能够帮你解决c – 最快的方式来生成一个从i位置开始的n个面具所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。