我正在尝试解决这个...我的代码如下
#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值复制的.
试图取代int的unsigned int.