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

C语言中的循环移位计算?
00010100循环左移2位后是01010000,用10进制表示就是80,而80按8进制输出(输出格式为%o),就是120。

如何用c语言实现循环左移
过程:b=a>>(8-2) 用来得到正常左移丢失的位和循环移位后其正确位置 b=00000001;a=a<<2;左移 a=11101100 a=a|b; a=11101101 如果不是用中间变量 a=(a>>(8-2))|(a<<2)总长度N(8 16 32)循环左移n: (a>>(N-n))|(a>>n)循环右移n: (a<<(N-n))|(a>>n)C语言的位...

循环左移 和循环右移是什么意思啊
1、将x左端的n位先移动到y的低n位中,x>>(32-n);2、将x左移n位,其右面低位补0,x<<n;3、进行按位或运算(x >> (32 - n) | (x << n));循环右移的过程可以分为3步:1、将x的左端的低n位先移动到y的高n位中x<<(32-n)2、将x右移n位,其左面高n位补0x>>n;3、进行...

c语言无符号单字节数的八位以内的循环右移循环左移怎么写
\/\/参数说明: x = 输入的值 n 移位数 \/\/循环左移 #define ROTATE_LEFT(x, n) ((x) << (n)) | ((x) >> ((8*sizeof(x)) - (n)))\/\/循环右移 #define ROTATE_RIGHT(x, n) ((x) >> (n)) | ((x) << ((8*sizeof(x)) - (n)))\/\/使用例子: #include <...

C语言编写一个函数将一个整数循环右移
while(k>0)\/\/移位 { t=a[m-1];\/\/将最后一个数字暂存!for(i=m-2;i>=0;i--)\/\/循环向右移位 a[i+1]=a[i];a[0]=t;\/\/将最后一个数字付给第一个数字 k--;} } int main(){ int a[N]={0},m=0,k,n,i;printf("输入你要移位的数:");scanf("%d",&k);printf("...

顺序表的循环移位(C++或者C语言)
{ int ar[11],b[11];int length,n,bool_;int i,j;printf("请输入数的个数(不大于10)");scanf("%d",&length);printf("请输入一串数字:");for(i=0;i<length;i++){ scanf("%d",&ar[i]);b[i]=ar[i];} for(i=0;i<length;i++)printf("%d ",ar[i]);for(j=1;j<=...

C语言编程题:移位函数,既能循环左移又能循环右移
include <stdio.h>#include <math.h>unsigned fun(unsigned num, int n){ if(n > 0) { \/\/sizeof(unsigned)*8计算变量所占位数,如int型占32位 return (num >> (sizeof(unsigned)*8 - n)) | (num << n); \/\/先高位移动,再低位移动后,两者按位或,相当把低位溢出的...

C语言中循环移位和算术移位是怎么样的?怎么理解 ?
左移没有循环移位和算术移位说法。而对于右移,若右移补充0则为循环右移,若补充1则为算术右移。因为算数运算针对的是有符号数,对于一个计算机中数据来说,若首位为1则为负数。所以补充1这个可以解决符号问题。当然这个说法并不准确,但也许会对你记忆产生帮助。

用C语言编写一个循环左移移位
以无符号整型为例:unsigned int func(unsigned int n){ unsigned int v=n&(1<<(sizeof(unsigned int)-1)); n<<=1; if(v) n|=1; return n;}

如何用C语言实现32位变量的循环移位
int rol(int n, int c){ while (c > 0) { n = (n << 1) | ((n >> 31) & 1); c--; } return n;}int ror(int n, int c){ while (c > 0) { n = ((n >> 1) & 0x7fffffff) | ((n & 1) << 31); c--; } return n;} ...

相似回答