?:称为条件运算符。?:就是表示?前的表达式的值是否为真,是的话取冒号前的值,否则取冒号后的值。
相当于:
if (x>y)
{z=x;}
else
{z=y;}
扩展资料
C语言中条件表达式的通用形式如下:
exp0=exp1?exp2:exp3
如果exp1为真(非0),那么把exp2的值赋给exp0;如果exp1为假(0),那么把exp3的值赋给exp0。
2.verilog语法中也有类似C语言中的条件表达式
如下:
inout sda;
assign sda=(flag==1)?data_buf:1'bz;
当flag==1时,sda的值等于发送的数据的data_buf(sda相当于output类型),
当flag==0时,sda的值变成高阻态(sda相当于input类型)。
参考资料来源:
百度百科——条件运算符
如果x>y,就把x的值赋给z,否则把y的值付给z。
可以把z=x>y? x : y理解为
if(x>y){
z=x;
}else{
z=y;
}
扩展资料:
三目运算符,又称条件运算符,是计算机语言(c,c++,java等)的重要组成部分。它是唯一有3个操作数的运算符,所以有时又称为三元运算符。一般来说,三目运算符的结合性是右结合的。
对于条件表达式b ? x : y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。一个条件表达式绝不会既计算x,又计算y。条件运算符是右结合的,也就是说,从右向左分组计算。例如,a ? b : c ? d : e将按a ? b : (c ? d : e)执行。
可以理解为条件 ? 结果1 : 结果2 里面的?号是格式要求。也可以理解为条件是否成立,条件成立为结果1,否则为结果2。
!(x+y) > z 表达式中:
!的优先级高,先计算出x+y的值,若x+y不为0,则!(x+y)的值为0,反之为1,然后将这个值和z进行比较,如果大于z返回1,小于z返回0 。
具体的,这里是将x+y的值作为一个bool型返回了,所有不为0的数都相当于true(1),为0的数也就是false。!将表达式取反,!0==1 / !1==0 。然后在大于号那里,又将这个bool型变量转为了一个整型变量与z进行比较,若表达式结果为真返回true(1), 否则返回false(1)。
x+=y+=z相当于这个语句:y=y+z,x=x+y;
我写下执行过程,楼主看看就应该明白了。
x+=y+=z;那么y=y+z,所以y==2;x=x+y,所以x==5。
执行printf();由于x
x=y>z>=5;关系运算符优先级高于赋值运算符,所以先执行y>z>=5,由于y>z为假(上面已经得到y==z==15),所以y>z==1,由于1>=5为假,所以x=0。那么x==0,y==15,z==15,输出0,15,15\n。
希望对你有些帮助。
?:是一个三目运算符,他的意思是如果问号前面的表达式为真,则返回:之前的表达式的值,否则返回:之后的表达式的值
这句话可以拆解为
if(x>y) {
z=x;
} else {
z=y;
}
也就是将x、y的较大者赋值给z