首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >__int128的位操作

__int128的位操作
EN

Stack Overflow用户
提问于 2017-04-15 20:27:17
回答 1查看 924关注 0票数 6

我试图向__int128添加位(使用clang编译器和64位系统),但失败了。

代码语言:javascript
复制
__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

指纹:

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

我知道有一些短表单可以用于无符号int或long long int,例如

(1u << 15)或(1LL << 15),但我没有找到任何128位等效的。

我需要做些什么才能让这件事成功?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-15 20:35:37

如果我们使用大括号std::bitset<100>{x}而不是圆括号std::bitset<100>(x),程序由于收缩转换而无法编译:

错误:不能将非常量表达式从'__int128'类型缩小为初始化程序列表[-Wc++11-narrowing]中的[-Wc++11-narrowing]类型。

这里发生的情况是,__int128工作正常,但是向std::bitset的转换是不正确的。您必须将__int128拆分为64位块:

代码语言:javascript
复制
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';
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43430957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档