有关C语言中将算数右移转变为逻辑右移,逻辑右移转变为算数右移的程序
课本中给出了以下算数右移和逻辑右移相互转换的程序,请各位高手帮忙解释以下2个函数每个语句的意思,看了半天没有看懂。#include <stdio.h>
main()
{
int a,n,m;
a=~0;
if(a>>5 != a)
{
printf("逻辑右移!\n");
m=0;
}
else
{
printf("算数右移!\n");
m=1;
}
scanf("%o",&a);
printf("请输入右移位数"");
scanf("%d",&n);
if(m == 0)
printf("改变为算数右移后结果为:%o\n",getbits1(a,n));
else
printf("改变为逻辑右移后结果为:%o\n",getbits2(a,n));
}
getbits1(unsigned value, int n) //这个函数没有看懂!! 请解释以下各个语句
{
unsigned z;
z=~0;
z=z>>n;
z=~z;
z=z|(avalue>>n);
return z;
}
getbits2(unsigned num, int n) // //这个函数没有看懂!!请解释以下各个语句
{
unsigned z;
z=(~(1>>n))&(num>>n);
return z;
}