238条件运算 问号运算符:(?:)唯一的三目运算符。 问号表达式:el?e2:e3 e1必须为基本类型或指针,可求出0或非0值。 e2和e3为基本类型时,可分别为不同基本类型 e2和e3为结构、联合类型时,必须为相同类型
2.3.8 条件运算 问号运算符: (? : ) 唯一的三目运算符。 问号表达式: e1 ?e2 : e3 e1 必须为基本类型或指针,可求出0或非0值。 e2和e3为基本类型时,可分别为不同基本类型。 e2和e3为结构、联合类型时,必须为相同类型
运算符的功能 el 非0 0 计算e2 计算e2 以e2的值为结果 以e2的值为结果 运算结果:根据e决定取e2或e3的值作为表达式式的值。 当e2和e3的类型不同时,则转换成同类型 运算结果只有一种类型,即转换后的类型
e1 计算e2 以e2的值为结果 计算e2 以e2的值为结果 运算符的功能: 运算结果:根据e1决定取e2或e3的值作为表达式式的值。 当e2和e3的类型不同时,则转换成同类型。 运算结果只有一种类型,即转换后的类型 非0 0
例1:inti=0; unsigned j i? i++: i+ 结果为1,类型为 unsigned,i的值未变。 计+1?计++:计+j结果为0,类型为 unsigned,i的值为1。 例2:求变量a,b中较大的一个 a>b? a b 例3:若字符ch为小写字母,改成大写字母,否则不变。 ch=(ch>=a'&& ch<=z)?(ch-a+A): ch ch=(ch>=a,&&ch<=2z)?(ch-32):ch 例4:结合性:从右至左,优先级别仅高于赋值和逗号。 (a>0)?1:(a<0)?-1:0) (a>0)?l:(a<0)?-1:0 等价 a>0?1:a<0?-1:0
例1: int i=0; unsigned j=1; i ? i++ :i+j 结果为1,类型为unsigned,i的值未变。 i+1 ? i++ :i+j 结果为0,类型为unsigned,i的值为1。 例2: 求变量a,b中较大的一个。 a>b ? a :b 例3:若字符ch为小写字母,改成大写字母,否则不变。 ch=(ch>=‘a’ && ch<=‘z’) ? (ch-’a’+’A’) :ch ch=(ch>=‘a’ && ch<=‘z’) ? (ch-32) :ch 例4:结合性:从右至左,优先级别仅高于赋值和逗号。 (a>0) ? 1: ((a<0)? –1 :0) (a>0) ? 1: (a<0)? –1 :0 a>0 ? 1: a<0? –1 :0 等价