加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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位.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读