c++ - 设置最高有效位
问题描述
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)
但它不起作用。
解决方案
仅使用位操作的选项:
template<typename T>
void Item(T& elem, bool flag = false) {
T mask = (T)1 << (sizeof(T) * 8 - 1);
elem = (elem & ~mask) | (flag ? mask : 0);
}
推荐阅读
- android - Android 文本注释 java.lang.ClassCastException:java.lang.String 无法转换为 android.text.SpannedString
- graph - 连接随机点以形成网格状网络
- java - 如何在不使用 pojo 类的情况下在 spring boot 中创建 mongodb 集合?
- java - Java - 如何将时区转换为不同的格式?
- python - 计算每个固定时间对刺激的反应平均值
- java - traceId 和 spanId 在整个记录器中都相同
- postgresql - 尝试连接到任何 Postgres 13 实例时出现“错误:数据库 'postgres' 的连接太多”
- go - 验证用户是否已使用 MSAL/Azure AD 登录并向他们提供我的单独 API 的令牌?
- authorization - 我可以在 NATS.io 中实现自定义授权吗?
- cmake - CMake 找不到 GMP