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
相关产品推荐
相关产品推荐

