gpt4 book ai didi

c - 为什么我的右移运算符在 c 中按逻辑而不是算术运行?

转载 作者:行者123 更新时间:2023-11-30 20:50:05 25 4
gpt4 key购买 nike

我目前正在使用 C 语言进行位操作,我注意到右移运算符的行为并不像我预期的那样。据我了解,左移在从 LSB 移动时会留下 0,右移在从 MSB 移动时会留下 1。

所以我尝试制作一个简单的位掩码,如下所示:110000

通过创建一个 int 32>>1

当我输入 32>>1 时,我没有按预期得到 48,而是得到 16。为什么?

最佳答案

算术右移仅在高位当前为 1 时移入 1。

考虑这个程序:

main() {
int a, b;
a = 32;
b = a>>1;
printf("a is %d 0x%08x; b is %d 0x%08x\n",a,(unsigned int)a,
b,(unsigned int)b);
a = -10;
b = a>>1;
printf("a is %d 0x%08x; b is %d 0x%08x\n",a,(unsigned int)a,
b,(unsigned int)b);
}

如果你运行这个,你会看到:

a is 32 0x00000020; b is 16 0x00000010
a is -10 0xfffffff6; b is -5 0xfffffffb

关于c - 为什么我的右移运算符在 c 中按逻辑而不是算术运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52787958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com