导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→关于C语言中的移位运算的一个疑问,望各位大侠帮忙解答

* 45379: 关于C语言中的移位运算的一个疑问,望各位大侠帮忙解答

   LEON1741 
LEON1741发表的帖子 

 关于C语言中的移位运算的一个疑问,望各位大侠帮忙解答
大家都知道,实现高效的c 语言编写的方法中,有一招是使用位操作。
我前几天在网上看到一篇文章中讲到以下一个例子,就是关于移位运算的问题。
作者给了一个比较,首先是正常的运算:
int i,j;
i=257/8;
j=456%32;

然后是位运算:

int i,j;
i=257>  >  3;
j=456-(456>  >  4  <  <4);

并说第二种方法仅仅是几句相关的汇编,代码更简洁、效率更高。
这是没错,
但是其中的j的运算表达式中,为什么要先右移4位后再左移4位?
它原来是除32求余,换算过来应该也是5位啊?那它移4位的结果应该会出错吧

于是我自己去turbo c环境下试了试,
却发现不仅仅4行,6也行,运算结果都和5一样,只是3和7不一样
具体程序如下:

main()
{
    int k,l,m,n,o;

    k  = 456 - (456>  >  3  <  <3);
    l   = 456 - (456>  >  4  <  <4);
    m = 456 - (456>  >  5  <  <5);
    n  = 456 - (456>  >  6  <  <6);
    o  = 456 - (456>  >  7  <  <7);

    printf("%d,%d,%d,%d,%d",k,l,m,n,o);
}

其输出结果依次是:0,8,8,8,72

因此想在这求助各位大侠们,帮我解释一下为什么……
多谢啦~~


        

发表时间:2008年5月19日20:14:14

  
回复该帖

本主题共有 2 帖,分页:>>>>>该主题的所有内容[2]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:链接不对呵?没法打开,写错了吗?
[下一篇帖子]:关于Keil C编译环境的一个小疑问,望解答*.src 文件是怎么来的?