C语言中的循环移位计算?

24循环左移2位为什么得到的是120,循环右移2位得到的为什么是5,不应该分别是96和6吗?

因为是按8进制输入的,8进制的24换成10进制就是20,换成2进制就是00010100(以1字节表示)。而00010100循环右移2位后就是00000101,即10进制的5,而5按8进制输出(输出格式为%o),就是5。

00010100循环左移2位后是01010000,用10进制表示就是80,而80按8进制输出(输出格式为%o),就是120。追问

为什么8进制的24换成10进制就是20

追答

即4*8^0+2*8^1=4+16=20

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-06-24
for(i=0;i<k;i++) //进行k次移动
{
t=a[n-1]; //保存最右的数据循环右移是将所有数向右移动,移出来的数放到最左边,如此反复
for(j=n-1;j>0;j--) //把所有数据向右移动一位
{
a[j]=a[j-1];
}
a[0]=t; //把移出来的数据放到最左
}
这是很简洁的移位算法,你的算法一时还看不明白。。。
第2个回答  2022-06-24
for(i=0;i<k;i++) //进行k次移动
{
t=a[n-1]; //保存最右的数据循环右移是将所有数向右移动,移出来的数放到最左边,如此反复
for(j=n-1;j>0;j--) //把所有数据向右移动一位
{
a[j]=a[j-1];
}
a[0]=t; //把移出来的数据放到最左
}
这是很简洁的移位算法,你的算法一时还看不明白。。。
第3个回答  2020-07-18
首先搞清楚,数据类型,如果是8位整型数,24应该是下面的2进制数:
24=16+8=(0001 1000)2
循环左移两位是:
(0110 0000)2=64+32=96
循环右移两位是:
(0000 0110)2=4+2=6