Jam*_*sev 9 c bit-manipulation bit-shift
寻求澄清一些事情.
我的理解是关于算术,逻辑按位移位:
<< 两者都是一样的>> 移位的不同之处在于逻辑移位总是将字节填充为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)