主题:一段程序看不懂,大家帮忙
测试自己计算机编译系统是算术右移还是逻辑右移,且若为算术右移,输出逻辑右移的值,若为逻辑右移,输出算术右移的值
蓝色那段看不懂,觉得似乎不对,但运行结果是对的
#include <stdio.h>
void main()
{
short Arithmetic (unsigned short value ,int n);
short Logical (unsigned short value,int n);
short int a,b,c,n,flag;
a=~0;
b=a>>1;
if(a==b)
flag=1;
else
flag=0;
if(flag)
printf("本编译系统采用算术右移\n");
else
printf("本编译系统采用逻辑右移\n");
printf("请输入一个八进制数及右移的位数\n");
scanf("%o %d",&c,&n);
if(flag)
printf("采用逻辑右移的结果为:%o\n",Logical(c,n));
else
printf("采用算术右移的结果为:%o\n",Arithmetic(c,n));
}
[color=0000FF]short Arithmetic (unsigned short value,int n)
{
unsigned short z;
z=~0;
z=z>>n;
z=~z;
z=z|(value>>n);
return z;
}[/color]
short Logical (unsigned short value,int n)
{
unsigned short z;
z=(~0)&(value>>n);
return z;
}
对于蓝色那段函数,假如输入1 ,1的话,那个函数运行出来的结果不是有问题了吗?还有,为什么要将value定义成无符号型的? 请指教
蓝色那段看不懂,觉得似乎不对,但运行结果是对的
#include <stdio.h>
void main()
{
short Arithmetic (unsigned short value ,int n);
short Logical (unsigned short value,int n);
short int a,b,c,n,flag;
a=~0;
b=a>>1;
if(a==b)
flag=1;
else
flag=0;
if(flag)
printf("本编译系统采用算术右移\n");
else
printf("本编译系统采用逻辑右移\n");
printf("请输入一个八进制数及右移的位数\n");
scanf("%o %d",&c,&n);
if(flag)
printf("采用逻辑右移的结果为:%o\n",Logical(c,n));
else
printf("采用算术右移的结果为:%o\n",Arithmetic(c,n));
}
[color=0000FF]short Arithmetic (unsigned short value,int n)
{
unsigned short z;
z=~0;
z=z>>n;
z=~z;
z=z|(value>>n);
return z;
}[/color]
short Logical (unsigned short value,int n)
{
unsigned short z;
z=(~0)&(value>>n);
return z;
}
对于蓝色那段函数,假如输入1 ,1的话,那个函数运行出来的结果不是有问题了吗?还有,为什么要将value定义成无符号型的? 请指教