Chinaunix
标题:
expression?pattern1:pattern2的问题
[打印本页]
作者:
dl0622
时间:
2010-02-24 11:20
标题:
expression?pattern1:pattern2的问题
#include<iostream.h>
#define ByteAllign(len) ( ((len) % 4) ? (len) + 4 - (len) % 4 : (len))
#define absolute_value( x ) ( ((x) < 0) ? -(x) : (x) )
int main()
{
int nLen ;
cout << "please input an int type value : " ;
cin >> nLen;
int AllignResult = ByteAllign(nLen);
int AbsoluteValue = absolute_value(nLen);
cout << "allign value is : " << AllignResult << endl ;
cout << "AbsoluteValue is : " << AbsoluteValue << endl ;
}
复制代码
上面这段代码,#define ByteAllign(len) ( ((len) % 4) ? (len) + 4 - (len) % 4 : (len))
这句不是说当len能整除4时执行(len) + 4 - (len) % 4,否则执行(len)吗?为什么实际结果跟我理解的刚好相反呢???
作者:
雨过白鹭洲
时间:
2010-02-24 11:30
((len) % 4 == 0)
或者后面两个表达式反过来
作者:
xyfree
时间:
2010-02-24 11:31
len%4 == 0 --> len
len%4 != 0 --> len+4-len%4
作者:
dl0622
时间:
2010-02-24 12:56
还是理解不了,条件(len) % 4根本不知道是什么值,咋知道什么情况下取前一个表达式,什么时候取后一个表达式。
作者:
daybreakcx
时间:
2010-02-24 13:02
本帖最后由 daybreakcx 于 2010-02-24 13:04 编辑
4 - len % 4这个部分就是补齐的量,是往len后添加的,当len % 4非0的时候才进行补齐,也就是前一个表达式
作者:
pagx
时间:
2010-02-24 13:06
(((len) + 3) & ~0x03)
exp 为真取前者,否则取后者。
C 语言只要exp值不为零,就是真。为零则假。
作者:
dl0622
时间:
2010-02-24 13:38
顶顶顶,楼上正解!C++也应该一样
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2