想澄清一些事情。
据我了解,关于算术、逻辑位移:
-
<<
两者的工作相同 -
>>
移位的不同之处在于逻辑移位将始终用 0 填充字节,而算术移位将用符号位填充它。
我如何使用 C 区分它?
据我了解,实际运算符(operator)是相同的<<
, >>
命令之间有何不同:
int i=1;
printf ("%d\n", i >> 1); // logical shift
int j=1;
printf ("%d\n", j >> 1); // arithmetical shift
请告诉我,
最佳答案
在非负数的情况下,两种右移是相同的。仅当要移动的数字为负数时才会出现差异。
实际上C标准并没有规定>>
在数字为负数的时候应该进行逻辑移位还是算术移位,但是通常情况下,它会进行算术移位。要执行逻辑移位,必须将数字转换为相应的无符号类型,for example :
int x = -2;
int y = x >> 1; // arithmetic shift.
assert (y == -1);
int z = (unsigned)x >> 1; // logical shift.
assert (z == 0x7FFFFFFF);
关于c - 逻辑算术移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3703000/