gpt4 book ai didi

c - c中的翻转位

转载 作者:行者123 更新时间:2023-11-30 16:49:01 27 4
gpt4 key购买 nike

在这段代码中,我应该要求用户翻转 32 位中的 1。当我翻转第 32 位(索引 31)时,即使我使用无符号整数,我也会收到 -2147483648 。如何修复翻盖才能正确伸出?

int main(int argc, char *argv[]) {
int32_t num = 0;
int bitC = 0;
int number;
char cont;
do {
printf("Enter a number between 1 and 1000\n");
do {
scanf(" %d", &num);
if(num < 0 || num > 1000) {
printf("Error: Number MUST be between 1 and 1000.\n");
//printf("Please re-enter number.\n");
}
} while(num < 0 || num > 1000);
printf("Choose a bit, between 0 and 31, to flip\n");
do {
scanf(" %d", &bitC);
if(bitC < 0 || bitC > 31) {
printf("Error: bit MUST be between 0 and 31\n");
//printf("Please re-enter bit to change.\n");
}
} while(bitC <0 || bitC > 31);
printf("Number before bit flip was %d\n", num);
//num ^= (-bitC ^ num)&(1 << bitC);
num ^= (1UL << bitC);
printf("New number is: %d\n", num);
printf("Would you like to shift another bit?\n");
printf("Enter y to continue or n to quit\n");
scanf(" %s", &cont);
} while(cont == 'y');
return 0;
}

最佳答案

您现在正在程序中使用有符号整数。但真正的问题是,当你 printf 时,你使用的是 %d,这会导致 printf 将参数求值(记住 printf 不知道它到底是什么,它只是堆栈上的一个值)作为有符号 int,即使传递给 printf 的值是无符号的。使用%u。

关于c - c中的翻转位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42749558/

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