编写一个程序来交换奇数和偶数位整数所需的最小步数是多少?

lea*_*bee 3 c

我正在尝试解决这个...我的代码如下

#include<stdio.h>
int main() {
    int a, b = 0xaaaaaaaa, c = 0x55555555;
    printf("\n enter the number: \n");
    scanf("%d", & a);
    a = ((a & b) >> 1) | ((a & c) << 1);
    printf("\n %d", a);
}
Run Code Online (Sandbox Code Playgroud)

..但我得到了一些奇怪的输出..谁能告诉我我犯的错误是什么?

val*_*ldo 11

你的想法还可以.也许你得到了奇怪的输出,因为比特移位不能完全按照你的预期工作.

你的变量是类型的int.手段 - 他们签署.现在,当您将bitshift转换为有符号整数时,还有关于如何传播MSB位的其他规则.简单来说,当有符号整数向右移位时,MSB不一定为零,它是从旧的MSB值复制的.

试图取代intunsigned int.

  • 对于有符号整数,`<<`在负值上有**未定义的行为**或者如果正值溢出,则`>>`在负值上具有实现定义的行为.不要使用带有签名类型的位移.像valdo一样说并将你的类型改为`unsigned`,你的代码就可以了. (4认同)