首页 > 解决方案 > 设置最高有效位

问题描述

unsigned int我正在尝试根据bool标志切换最重要的位。这是我的假设代码K = unit64_t

这是Item课程:

template<typename K>
class Item {
  public:
    K first;

    Item() = default;
    explicit Item(const K &elem, const bool flag = false) {
      first = elem & 0x3FFFFFFFFFFFFFFF;
      first |= (flag * 0x8000000000000000);
    }
};

有没有办法做到这一点完全通用?它适用于所有类型的数字K吗?

我试过了,8 * sizeof(K)但它不起作用。

标签: c++c++17bit-manipulation

解决方案


仅使用位操作的选项:

template<typename T>
void Item(T& elem, bool flag = false) {
    T mask = (T)1 << (sizeof(T) * 8 - 1);
    elem = (elem & ~mask) | (flag ? mask : 0);
}

推荐阅读