c++ - 为什么移动超过允许的位仍然有效?

标签 c++ binary bit-manipulation bitwise-operators bit-shift

我有一个 int8_t,我想看看如果我将它左移超过 8 位会发生什么。所以这就是我所做的:

int8_t x = 1;

std::cout << (x << 10);

出于某种原因,这将返回 1024,就好像该类型包含足够的位来表示该数字一样。我认为当你移位超过给定的位时,你会在所有位中得到 0(或导致未定义行为的有符号溢出/下溢)。此外,我运行此代码以获取最大数量的 int8_t:

std::numeric_limits<int8_t>::max(); // 127

这种类型的最大数量是 127,但向左移动它可以使它甚至比它的无符号类型更高!这怎么可能?

最佳答案

<< 的参数正在被隐含地扩大到 int ,以及 x << 10 的结果也是一个 int .

关于c++ - 为什么移动超过允许的位仍然有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15600055/

相关文章:

c++ - std 库头中的奇怪枚举语法

c++ - 如何使用 mingw 编译 cryptopp 5.6.2

c++ - 理解 C++ 中的 std::move 和使用 std::unique_ptr 的所有权转移

python - 在 Python 中从二进制文件中读取整数

c++ - 如何在 C/C++ 中处理二进制数据

c - 使用 8 位整数作为标志掩码

c++ - 理解托管 C++

c# - BinaryReader、BinaryFormatter - 它们可移植吗?

c++ - 使用位域来节省内存

c - 如何更改 uint32_t 变量中单个字节的值?