回 帖 发 新 帖 刷新版面

主题:一段程序看不懂,大家帮忙

测试自己计算机编译系统是算术右移还是逻辑右移,且若为算术右移,输出逻辑右移的值,若为逻辑右移,输出算术右移的值

蓝色那段看不懂,觉得似乎不对,但运行结果是对的


#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定义成无符号型的?     请指教

回复列表 (共3个回复)

沙发

深圳市华信群英科技有限公司与知名通信软件公司正式签订定向输送人才的合作协议
针对想进入IT软件行业的有志人士提供专业的企业内训
实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段
实训前就签订就业安置协议,岗前实训后入职
不仅学费优惠而且是企业定向培训定向招聘,百分百保证就业
有意向请登录www.szctt.com,或加QQ:1179397962做详细咨询

板凳


[code=c]
 short Arithmetic (unsigned short value,int n)   
   {
       unsigned short z;
       z=~0;
       z=z>>n;
       z=~z;
       z=z|(value>>n);
       return z;
    }  


z=(unsigned short)((usinged short)(value/(2^n))+(2^16-1)+(2^(16-n)-1)=(usinged short)(value/(2^n))+2^16+2^(16-n))[/code]

3 楼


[code=c]
 short Arithmetic (unsigned short value,int n)   
   {
       unsigned short z;
       z=~0;
       z=z>>n;
       z=~z;
       z=z|(value>>n);
       return z;
    }  

[/code]

建议改成:
[code=c]
int Arithmetic (unsigned short value,int n)   
   {
       unsigned short z;
       z=~0;
       z=z>>n;
       z=~z;
       int temp=z|(value>>n);
       return temp;  //temp=(usinged short)(value/(2^n))+(2^16-1)+(2^(16-n)-1)=(usinged short)(value/(2^n))+2^16+2^(16-n)
    }  
[/code]

我来回复

您尚未登录,请登录后再回复。点此登录或注册