位移位和操作

  • 本文关键字:操作 c
  • 更新时间 :
  • 英文 :


我正在尝试使用位操作,并且正在努力直接修改位。

我有一些东西如下:

unsigned char myBits = 128; // 10000000 in binary
myBits = myBits >> 1; // Right shift, so we get 64, or 01000000 in binary

现在,我将如何使用位操作来修改右移(01000000)后的第一个位为1 (11000000)?

大多数实现都会将"1"如果所讨论的类型为带符号且值为负数,则从左边开始第2位

因此,您可以将类型更改为signed char,或者对无符号类型进行一些强制转换:

myBits = (unsigned char)((signed char)myBits >> 1);

您需要将其与移位值进行二进制或:

myBits |= myBits >> 1;

https://godbolt.org/z/dY3eY5dc5

设置最高有效位(您可以将类型更改为任何整数类型,它都可以工作):

myBits |= 1ULL << (sizeof(myBits) * CHAR_BIT - 1); 

最新更新