为什么按位移位在这里用 1s 而不是 0 替换日期

why does bitwise shift replace date with 1s instead of 0 here?

本文关键字:替换 日期 1s 在这里 为什么      更新时间:2023-10-16

对于使用位掩码的程序,我希望用二进制写数字...即要复制前 8 位xz ,我写

y = 0xff000000;
z = 0;
z = (y & x) | z

x, y, zint.现在使用左移和右运算符,我想向或向左移动 1 个y以位屏蔽另一组位,所以我编写了以下代码

cout<< bitset<32>(y>>10) <<"n" << bitset<32>(y<<10) <<endl;

现在我期望的输出是:

00000000001111111100000000000000
00000000000000000000000000000000

但我得到了:

11111111111111111100000000000000
00000000000000000000000000000000
  1. 为什么输出的第一行上的新位"1"与"0"相吻合?
  2. 如何将电流输出更改为所需输出?

y 是一个有符号整数。在有符号整数中,最上面的位是符号位,当您右移有符号整数时,最上面的位会传播。

使用八位值:-4 为

11111100

当你右移-4时,你认为有什么意义?

你期望得到-2吗:

11111110

还是你期望得到 126?

01111110

请记住,左移相当于乘以 2,因此右移相当于除以 2(并丢弃余数)。

如果要移动有符号整数并获取无符号整数语义,请先将其强制转换为无符号整数。