c – 右移位的奇怪行为
发布时间:2020-12-16 10:08:51 所属栏目:百科 来源:网络整理
导读:有人可以解释我为什么以下代码: #include iostream#include bitsetint main(){ unsigned char i = 2; std::coutstd::bitset8((~static_castunsigned char(0)) i)std::endl; std::coutstd::bitset8((~static_castunsigned char(0)) i)std::endl; return 0;}
有人可以解释我为什么以下代码:
#include <iostream> #include <bitset> int main() { unsigned char i = 2; std::cout<<std::bitset<8>((~static_cast<unsigned char>(0)) << i)<<std::endl; std::cout<<std::bitset<8>((~static_cast<unsigned char>(0)) >> i)<<std::endl; return 0; } 生产: 22222100 22222111 并不是: 22222100 00222221 解决方法
在?完成之前,static_cast< unsigned char>(0)被转换为int(整数提升发生),所以在?之后它变为全一位int.然后将其移位并截断为bitset中的8位.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |