请教一道C语言程序题

编写函数实现左右循环移位(即移出的位在另一端填入)。函数原型为int move(int value,int n);其中value为要循环移位的数,n为移位的位数,n的绝对值不大于16,整型为16位。若n<0表示左移,n>0表示右移,n=0表示不移位。在主函数中输入数据并调用该函数得到结果,并输出结果。
INPUT
输入value和n,均为整型,用空格隔开
OUTPUT
sample input 134744064 -8
sample output 134742024

long long move(long long value, int n) {
    long long movedNum = 0;
    
    if (CHECK_VALUE < abs(n)) {
        return INVALID_VALUE;
    }
    
    if (n > 0) {
        movedNum = (value && ((1 < (n+1)) - 1)) << n;
    } else {
        movedNum = 0;
    }
    
    return value << n + movedNum;
}

楼主说的不是很清楚,1、整形为16位,你所说的整形是int还是 n,还是value

2、如果我没有看错的话,int 型(16位)最大数值为65535,而楼主的类子input 134744064 -8,其值远远大于int峰值,溢出了。

追问

这是八进制数

追答

需要我回答你可以i但是你必须给我明确的答复,你的很多都是矛盾的。
1\input 134,744,064 按照权位计算 1*8^8(8的8次方) 即使这个数也远远大于int型最大数值了。
2\value的位数是不是固定的?16位或者小于16位不满16位的高位补0?还是32位。。。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答