gpt4 book ai didi

c++ - 什么时候右移操作>>移位符号位,什么时候不移位?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:03 26 4
gpt4 key购买 nike

我的问题是为什么 a>>1 移动符号位,而不是 (a & 0xaaaaaaaa) >> 1

代码片段

int a = 0xaaaaaaaa;
std::cout << sizeof(a) << std::endl;
getBits(a);
std::cout << sizeof(a>>1) << std::endl;
getBits(a >> 1);
std::cout << sizeof(a & 0xaaaaaaaa) << std::endl;
getBits(a & 0xaaaaaaaa);
std::cout << sizeof((a & 0xaaaaaaaa)>>1) << std::endl;
getBits((a & 0xaaaaaaaa) >> 1);

结果

4
10101010101010101010101010101010
4
11010101010101010101010101010101
4
10101010101010101010101010101010
4
01010101010101010101010101010101

最佳答案

a >> 1 很无聊。它只是为负 asigned 类型定义的实现。

(a & 0xaaaaaaaa) >> 1 更有趣。对于可能有 32 位 int(以及其他)的情况,0xaaaaaaaa 是一个 unsigned 文字(十六进制文字的晦涩规则) .因此,由于 C++ 类型提升规则 a 也被转换为 unsigned 类型,因此表达式 a & 0xaaaaaaaa 的类型是 未签名

为酒吧测验提出了一个很好的问题。

引用:http://en.cppreference.com/w/cpp/language/integer_literal ,尤其是“文字的类型”表。

关于c++ - 什么时候右移操作>>移位符号位,什么时候不移位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44264156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com