当试图用两种不同的方式将一个整数除以 2 的幂时,我得到两个不同的输出。 一种方法是通过将其向右移动 k 位来实现。另一种方法是将其除以 (1<<k)。
#include <stdio.h>
int main(void) {
int y1 = 0x00061290;
int y2 = 0xFFFE1A32;
printf("(y1/(1<<k))=%x\n", (y1/(1<<5)));
printf("(y2/(1<<k))=%x\n", (y2/(1<<5)));
printf("(y1>>k))=%x\n", (y1>>5));
printf("(y2>>k))=%x\n", (y2>>5));
return 0;
}
输出:
(y1/(1<<k))=3094
(y2/(1<<k))=fffff0d2
(y1>>k))=3094
(y2>>k))=fffff0d1
当y1为0x00061290时,该整数的输出相同。当y2为0xFFFE1A32时,该整数的输出不同。
我猜是因为y1为正数,而y2不是。但我不确定。有人能告诉我它们在什么情况下不同,在什么情况下相同吗?如果可能的话,请解释两个操作的区别。谢谢