对于使用位掩码的程序,我希望以二进制形式写入数字......即要将x
的前8位复制到z
,我写
y = 0xff000000;
z = 0;
z = (y & x) | z
x, y, z
全部为int
。现在使用左移和右移运算符我想向右或向左移动y
的1位以掩码另一组位,所以我写下面的代码< / p>
cout<< bitset<32>(y>>10) <<"\n" << bitset<32>(y<<10) <<endl;
现在我的预期输出是:
00000000001111111100000000000000
00000000000000000000000000000000
但我得到了:
11111111111111111100000000000000
00000000000000000000000000000000
答案 0 :(得分:6)
y是有符号整数。在有符号整数中,最顶部的位是符号位,当右移有符号整数时,最顶部的位传播。
使用8位值:-4是
11111100
当你右移-4时,你认为什么才有意义?
你期望得到-2:
11111110
或者你期望得到126?
01111110
请记住,左移相当于乘2,所以右移相当于除以2(并丢弃其余部分)。
如果要移位有符号整数,并获得无符号整数语义,请先将其转换为无符号整数。