gpt4 book ai didi

c - C 中的逻辑右移,值为 ~0

转载 作者:太空狗 更新时间:2023-10-29 16:48:22 25 4
gpt4 key购买 nike

我有一个非常简单的代码,其中逻辑移位以奇怪的方式处理 ~0 值

据我所知,它与有符号/无符号数据类型有关

#include <stdio.h>

void printfbits(int x) {
for (int i=7; i>=0;i--) {
printf("%d", x>>i & 1);
}
printf("\n");
}

int main() {
printfbits(~0>>1);
}

我希望是 0111111,而不是 1111111。我也试过了,没有成功

printfbits(((unsigned int)~0)>>1);

最佳答案

在大多数平台上,int 是 32 位或 64 位长。因此,您向右移动了超过 8 位,这使您启用了超过 8 位:

11...11111111 >> 1

变成:

11...11111111 // if sign extension happens
01...11111111 // if not

如您所见,无论是否发生符号扩展,您仍然会看到所有 1,因为您只打印低 8 位。

关于c - C 中的逻辑右移,值为 ~0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54504366/

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