我正在尝试解决这个问题..我的代码如下
#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);
}
..但是我得到了一些奇怪的输出..任何人都可以告诉我我犯了什么错误吗?
你的想法没问题。
也许你正在得到奇怪的输出因为位移并不完全按照您的预期工作。
你的变量是类型int
。意味着——他们是signed。现在,当您对有符号整数进行位移时,还有关于如何传播 MSB 位的附加规则。简而言之,当有符号整数右移时,MSB 不一定为零,它是从旧的 MSB 值复制的。
尝试更换int
by unsigned int
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)