将一些位左移到现有数字中

Left shift some bits into a existing number

我有以下现有整数:

128 = 1000.0000

我想将下面的整数向左移动2位...

15 = 0000.1111

... 把现有的数改成bitindex 6:

MyResult 应该是 = 1011.1100 = 188

我已经试过了,但结果是错误的。另外,如果我将 positionsToShift 更改为 2:

int existingNumber = 128;
int numberToLeftShift = 15;
int positionsToShift = 6;

int myResult = (existingNumber << positionsToShift) | numberToLeftShift;

根据你的文字描述,你应该使用

var myResult = (numberToLeftShift << positionsToShift) | existingNumber;

根据您的解释,您希望 numberToLeftShift 转变

  15 << 2

然后与现有整数合并:

  (15 << 2) | 128

实施

  int existingNumber = 128;
  int numberToLeftShift = 15;
  int positionsToShift = 2;   // we want shift by 2 to the left; not by 6

  // numberToLeftShift and existingNumber are swapped
  int myResult = (numberToLeftShift << positionsToShift) | existingNumber;