逻辑,算术按位移位

Jam*_*sev 9 c bit-manipulation bit-shift

寻求澄清一些事情.

我的理解是关于算术,逻辑按位移位:

  1. << 两者都是一样的
  2. >> 移位的不同之处在于逻辑移位总是将字节填充为0,而算术移位将使用符号位填充它.

我如何使用C来区分它?

据我所知,实际的运营商是一样的<<,>>

命令如何区别:

int i=1;
printf ("%d\n", i >> 1); // logical shift

int j=1;
printf ("%d\n", j >> 1); // arithmetical shift
Run Code Online (Sandbox Code Playgroud)

请告诉我,

ken*_*ytm 15

在非负数的情况下,两种右移都是相同的.仅当要移位的数字为负时才会出现差异.

实际上,>>当数字为负时,C标准没有规定何时应该执行逻辑或算术移位,但通常,它执行算术移位.要执行逻辑移位,必须将数字强制转换为相应的无符号类型,例如:

int x = -2;
int y = x >> 1;    // arithmetic shift.
assert (y == -1);
int z = (unsigned)x >> 1;  // logical shift.
assert (z == 0x7FFFFFFF);
Run Code Online (Sandbox Code Playgroud)