急,在线等,求大佬帮忙看下代码,运行结果不正确,帮忙看下阴影部分代码到底哪里不行,谢谢

2025-06-21 08:44:24
推荐回答(3个)
回答1:

//是按照自己的思路修改的, 与楼主的思路不同

#include 
int main(void)
{
    int x,p,n,s;
    int i,j;
    int mask_0,mask_1,bitCheck;

    scanf("%d%d%d",&x,&p,&n);

    //原来的代码 int mask;
    //原来的代码 mask=(~(~0<    //原来的代码 s=(~x & mask) | (x & ~mask);

    s=x;
    //负责置1  0x1=00000000 00000000 00000000 00000001
    mask_1 = 0x1;
    //负责置0  0xFFFFFFFE=11111111 11111111 11111111 11111110
    mask_0 = ~mask_1;
    for(i=0;i    {
        mask_1<<=1;
        mask_0 = ~mask_1;
    }
    for(i=0;i    {
        bitCheck=s & mask_1;
        if(bitCheck)  //该位是"1"
        {
            s=s & mask_0;
        }
        else  //该位是"0"
        {
            s=s | mask_1;
        }
        mask_1<<=1;
        mask_0 = ~mask_1;
    }

    int m=1<<31;   //原来的代码 int m=1<<(n-1);
    for(i=1;i<=32;i++)
    {
        putchar(!(x&m)?'0':'1');
        x<<=1;
        if(!(i%8)&&i<32)
        {
            putchar(' ');
        }
    }
    putchar('\n');
    for(j=1;j<=32;j++)
    {
        putchar(!(s&m)?'0':'1');
        s<<=1;
        if(!(j%8)&&j<32)
        {
            putchar(' ');
        }
    }

    return 0;
}

回答2:

顶贴

回答3:

编译器有bug,把左移n位当n为32的倍数时按不移动处理了。你可以把~0<