Kos*_*tas 6 c++ bit-manipulation
我试图将位添加到__int128(使用clang编译器和64位系统),但失败了.
__int128 x = 0; //DECLARING AND INITIALIZING X
x |= ((static_cast<__int128>(1)) << 95); //ADDING A '1' TO 95th BIT (from right)
std::cerr<< std::bitset<100>(x) << std::endl; //PRINTING BITSET
Run Code Online (Sandbox Code Playgroud)
打印:
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
我知道我可以使用unsigned int或long long int的简短形式,例如
(1u << 15)或(1LL << 15),但我没有找到任何128位的等价物.
我需要做什么才能使这项工作成功?
如果我们使用大括号std::bitset<100>{x}而不是括号std::bitset<100>(x),由于转换变窄,程序无法编译:
错误:非常量表达式无法从类型缩小
'__int128'到'unsigned long long'初始化列表中[-Wc++11-narrowing]
这里发生的__int128是正常工作,但转换std::bitset是不正确的.您必须将其拆分__int128为64位块:
std::bitset<100> hi{static_cast<unsigned long long>(x >> 64)},
lo{static_cast<unsigned long long>(x)},
bits{(hi << 64) | lo};
std::cout << bits << '\n';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
563 次 |
| 最近记录: |