You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rightrot函数右移旋转输出异常问题求助

问题:rightrot函数旋转位运算结果不符合预期

我正在完成习题2-7,需要编写rightrot(b, n)函数,实现将整数b向右旋转n个比特位。但我编写的代码运行结果与预期不符。

代码实现

#include <stdio.h>

int rightrot(int b, int n) {
    char i = 1;

    while (n > 0) {
        if ((b & i) == i) {
            b = b >> 1;
            b = b << 25;
            b = ~b;
            b = b >> 1;
            b = ~b;
            b = b >> 24;
        }
        else
            b = b >> 1;
        n--;
    }

    return b;
}

int main() {
    int i, j, k;

    printf("Enter number: ");
    scanf("%d", &i);
    printf("Enter rotation: ");
    scanf("%d", &j);
    
    k = rightrot(i, j);
    printf("%d\n", k);
    return 0;
}

输入输出情况

Enter number: 153
Enter rotation: 3
-13

153的二进制为00000000000000000000000010011001,我期望最终输出为51,但实际得到*-13*。我在if分支中通过6行位运算代码尝试处理最低位为1的情况,但该部分逻辑未按预期工作(已单独测试)。我是按8位二进制进行旋转操作的,测试环境为64位Arch Linux,使用gcc编译代码。

我预期if分支的位运算会将b按以下步骤转换:

00000000000000000000000001001100
10011000000000000000000000000000
01100111111111111111111111111111
00110011111111111111111111111111
11001100000000000000000000000000
00000000000000000000000011001100

内容的提问来源于stack exchange,提问作者Haru Hoshizora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:30:16