作为二进制压缩为无符号整数的无符号整数半字节
Unsigned integer nibbles treated as binary compressed to unsigned integer
我用无符号整数表示二进制。例如:0x1111
存储为0xf(15)
我知道已经有了像BOOST_BINARY
、C++14
二进制文字和表示二进制数的宏技巧这样的解决方案
我只是想通过模板(受阶乘示例的启发)来实现这一点
下面的解决方案对于我手头的任务来说绰绰有余。
关于如何用模板而不是宏(也没有C++14
,只有C++11
)将其扩展到uint64_t
以上,或者如何改进这个/循环孔,有什么想法吗?我只是好奇
感谢
template <>
struct Uint64Nibbles2Binary<0x0>
{
enum {value = 0x0};
};
template <uint64_t num>
struct Uint64Nibbles2Binary
{
enum
{
value = (Uint64Nibbles2Binary<(num >> 4)>::value << 0x1) | (num & 0x1);
};
};
在C++14中,只需使用0b1111
。完成了。它们具有内置的二进制文字支持。
在C++11中,您将希望使用operator""
。
constexpr int64_t make_binary() { return 0; }
template<class...Rest>
constexpr int64_t make_binary( char C, Rest...rest ) {
return ((C=='1') << sizeof...(Rest)) + make_binary(rest...);
}
template <char...Cs>
constexpr int64_t operator"" _binary() {
static_assert(sizeof...(Cs) <= 64, "Binary value has too many bits");
return make_binary(Cs...);
}
然后:
111011110101101_binary
是在编译时计算的二进制文字。
实例
二进制输出的大小受64位int的限制。输入自然限制为64位。不使用前缀。在编译时进行错误检查以消除非0
和非1
值是可能的。
相关文章:
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 从 std::string 转换为 const 无符号整数
- 迭代器和无符号整数的重载 + 运算符
- C++,概念不适用于无符号整数作为结果类型?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 原子式清除无符号整数的最低非零位
- 计算机使用什么方法添加无符号整数
- boost::任何带有结构体和无符号整数
- 添加有符号和无符号整数
- 正在尝试读取4字节无符号整数的二进制文件并转换为伏特
- 如何将 6 字节无符号整数快速复制到内存区域
- 作为二进制压缩为无符号整数的无符号整数半字节
- 如何将 4 字节无符号整数写入二进制
- 1字节无符号整数c++
- 将字节转换为无符号整数的最快方法
- 将4个字节按小端序转换为无符号整数