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

2024-03-27

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

#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(使用前将#替换为@)

编写一个程序来交换整数中的奇数位和偶数位,所需的最少步骤是多少? 的相关文章

随机推荐