免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4113 | 回复: 10
打印 上一主题 下一主题

此宏什么意思? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-27 18:01 |只看该作者 |倒序浏览
#define AllocRound( x )                ( ( ( ( x ) + 3 ) >> 2 ) << 2 )

#define AllocMod( x )                ( AllocRound( x ) - ( x ) )

详细点谢谢

论坛徽章:
0
2 [报告]
发表于 2007-07-27 18:03 |只看该作者
原帖由 okyzx 于 2007-7-27 18:01 发表
#define AllocRound( x )                ( ( ( ( x ) + 3 ) >> 2 )  


匈牙利阿,老兄。

论坛徽章:
0
3 [报告]
发表于 2007-07-27 18:09 |只看该作者
#define AllocRound( x )                ( ( ( ( x ) + 3 ) >> 2 ) << 2 )

AllocRound(x) 就是 ((x+3)/4) * 4
也就是向上对齐为4的倍数
AllocMod就是需要补齐的数量

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2007-07-27 18:11 |只看该作者
第一个是取不大于x并且是4的倍数的最大数值。
第二个就是取模了。

论坛徽章:
0
5 [报告]
发表于 2007-07-30 08:46 |只看该作者

回复 #4 lenovo 的帖子

谢谢~~
应该是大于x并且4的整数倍吧?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2007-07-30 09:01 |只看该作者
原帖由 okyzx 于 2007-7-30 08:46 发表
谢谢~~
应该是大于x并且4的整数倍吧?

抱歉,我弄错了,
应该是大于。

论坛徽章:
0
7 [报告]
发表于 2007-07-30 09:19 |只看该作者
原帖由 okyzx 于 2007-7-27 18:01 发表
#define AllocRound( x )                ( ( ( ( x ) + 3 ) >> 2 )  

这是带参数的宏定义。
定义一般形式:#define  宏名(形参字串表)  宏串
带参的宏引用:宏名(实参字串表)
其中:
1)形参字串应是宏串的子字串,长度可为1或更大;
2)实参字串应与形参字串个数相同;
带参的宏展开过程:
       在宏串替换宏引用的过程中,将宏串从左到右
逐一展开,遇到与形参相同的字符串,则用对应的
实参字符串顶替,遇到其它字符则按顺序正常展开。

举个程序的例子吧!
#include &lt;stdio.h&gt;
#define SWAP(a,b) t=b;b=a;a=t

void main()

{ int a,b,t;

  printf("Input two integers a,b:");

  scanf("%d,%d",&a,&b);

  SWAP(a,b);

  printf("Now,a=%d,b=%d\n",a,b);

}



运行结果如下:

Input two integers a,b:3,4↙

Now,a=4,b=3

到了这里应该能够明白了吧。
还有“>>”是右移的符号;“<<”是左移的符号。

写到这里,我想提下意见。
当涉及到某放面的问题的时候,我希望大家一起将这类问题搞个透彻。而不是草草回答。
大家想一想C/C++中的问题虽然很多,但是只要我们每个人发现个把问题,然后共享。
你说咱中国人的C/C++技术,能不世界一流吗?
说到这里可能有的人说:靠,我一点技术全告诉了别人,那别人技术超过了我。我怎么混饭吃啊?
哎。。。。。
我们中国人啊!也不知道是谁发明了这句话:教会了徒弟饿死了师傅。
对于这种思想我想说几句:舍得舍得,不舍哪来得。我就不相信一个人全靠自己能将C/C++吃透。
也许自己以为理解的东西,其实理解错了,或理解得不透彻。可能带着这中错误思想在做工程的过程中
,出现了严重的错误。那才会影响自己的前途了。要是说出来,大家一起讨论,我想自己应该会有
意想不到的收获。
就说到这里吧,废话说了一大箩筐。也不知道会不会有些影响。

论坛徽章:
0
8 [报告]
发表于 2007-07-30 09:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2007-07-30 21:46 |只看该作者
呵呵,厉害
第一个宏可用于4字节对齐吧.

论坛徽章:
0
10 [报告]
发表于 2007-07-31 09:46 |只看该作者
#define AllocRound( x )                ( ( ( ( x ) + 3 ) >> 2 ) << 2 )

不小于x并且是4的倍数中的最小值
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP