c语言中的右移是逻辑右移还是算术右移的问题

2024-11-29 05:36:33
推荐回答(2个)
回答1:

c语言中的右移 -- 移到外面去的位则丢弃,移动出去的位填 0。
理论上是算术右移左移。由于有了上述约定算法,故 c语言 不强调 它是 逻辑右移 还是 算术右移,总之,移后的 结果 是 一样 的: 外面去的丢弃,移动出去的充0。
例如:
#include
main()
{
unsigned char x= 0x97;
unsigned int y=0xffffffff;
printf("result: %#x %#x\n",0xff & x, 0xff & (x >> 1));
printf("result: %#x %#x\n",y, y >> 1);
return 0;
}
输出:
result: 0x97 0x4b
result: 0xffffffff 0x7fffffff

回答2:

我在32上试了下结果,>>不管对有符号数还是无符号数都是ASR算数右移,然后我就奇怪LSR到底是怎么用C语言实现的,烦请各位大佬指点在下一二哈~