三目运算

 

表达式 : <表达式1>?<表达式2>:<表达式3>

“?”的意义是 计算表达式1的值,如果为真则计算表达式2的值,并作为整个表达式1的值。不为真计算表达式3的值,作为整个表达式1的值。

eg:

int a=2;

int b=(a=2?2:5);

//如果a=2则b=2,反之b=5。输出结果为2。

三目运算中执行顺序是自左向右

eg:

int a=1,b=2,z;

z=a>b?a:(a>b?a:b);

输出结果为2

 

可以去掉括号

eg:

int a=1,b=2,z;

z=a>b?a:a>b?a:b;

 

看这个帖子

http://topic.youkuaiyun.com/u/20101130/10/6723A0E7-0F49-4F97-9E60-E4D6C630285D.html

今天无意间看到别人写的这么一句,我就晕了...
return selforder <= order ? selforder != order ? -1 : 0 : 1;
返回的是个int类型
我知道三目可以连着写,是从右往左运算的,但这个...咋看都不像三目.
呵呵.
谁来说明下?

 =========================================

加上括号是:


selforder <= order ? ((lforder != order )?-1 : 0 ) :1;

写成if...else...结构

17楼说的很清楚

 

1 ?: 条件运算符,右结合性
2 一元运算符左结合性的有[].()(method call) .中间那个.都知道是对成员的引用.这是最高优先级的三个
  所以有这样的代码 boolean b=Pattern.compile(".*?//d{3}").matcher("whose your daddy?123").matches();
  大家都清楚怎么回事.
2 一元运算符右结合性 ! ~ ++ -- +(单目) -(单目) ()(cast) new 这是第二高优先级的8个
  1)想一想内部类的 A a=new A(); A.B ab=a.new B(); 
  2)再想一想 Object b=new Integer(4);
  int j= -(int)(Integer)(Number)b;
  大家也都清楚是什么意思
 
3 再看楼主这个 selforder <= order ? selforder != order ? -1 : 0 : 1;
  加上括号后是(selforder <= order) ? ((selforder != order)? -1 : 0 ): 1;
  1)为什么这么加括号,我们根据关系运算符大于条件运算符,2)条件运算是右结合的
  3)注意虽然是右结合的但是 算起来却是从左往右算的.所以就容易理解了.
  相当于 if(selforder<=order){
  if(selforder!=order)
  return -1;
  else retern 0;
  }
  else
  return 1;
 
4 既然是右结合性,为什么从左往右算?
  1)您从右往左能算得了吗? 
  2)条件运算符本身就是像a>b?1:0 一样从左往右算的
  3)类比  
  int a=2;
  int d=4;
  int c=a+++--d;
  System.out.println(c);

 

### 三目运算符的基础用法 三目运算符是一种简洁的条件判断语法,通常用于在两种可能的结果之间进行选择。其基本形式为 `condition ? expr1 : expr2` 或者在 Python 中表现为 `expr1 if condition else expr2`。 #### C/C++中的三目运算符 在 C/C++ 编程语言中,三目运算符的形式如下: ```c result = (condition) ? value_if_true : value_if_false; ``` 当 `condition` 的布尔值为真时,返回 `value_if_true`;否则返回 `value_if_false`[^2]。 例如,在下面的例子中,变量 `c` 被赋予较大的那个数: ```c int a = 7, b = 6; int c = (a > b) ? a : b; // 结果:c = 7 ``` #### Python中的三目运算符 Python 使用了一种稍微不同的语法来实现类似的逻辑操作: ```python result = expr1 if condition else expr2 ``` 如果 `condition` 为真,则返回 `expr1`;否则返回 `expr2`[^4]。 例如,以下代码片段展示了如何比较两个数字并获取较大值: ```python a, b = 7, 6 max_value = a if a > b else b print(max_value) # 输出:7 ``` ### 嵌套使用三目运算三目运算符还可以嵌套使用,从而构建更复杂的表达式。然而,这种做法可能会降低代码可读性,因此应谨慎使用。 #### C/C++中的嵌套示例 以下是 C/C++ 中的一个嵌套例子,它通过多重条件判断找到四个整数中的最大值: ```c #include<stdio.h> void main() { int a = 1, b = 2, c = 3, d = 4; printf("%d\n", ((a > b) ? a : b) > ((c > d) ? c : d) ? ((a > b) ? a : b) : ((c > d) ? c : d)); } // 输出:4 ``` 这里的关键在于理解括号的作用以及每一步的选择过程[^5]。 #### Python中的嵌套示例 同样地,在 Python 中也可以实现这样的功能,不过推荐采用分步写法以提高清晰度: ```python lst = [111, 222, 333] ret = lst[0] if lst[0] > lst[1] else lst[1] if lst[1] > lst[2] else lst[2] print(ret) # 输出:333 ``` 此段代码依次对比列表中的三个元素大小,并最终选出最大的那一个。 另外一种方式则是利用额外的小括号明确优先级关系: ```python ret5 = (lst[0] if lst[0] < lst[1] else lst[1]) if lst[1] < lst[2] else lst[2] print(ret5) # 输出取决于具体数值情况 ``` ### 特殊情形下的优化考虑 有时为了防止重复计算或者副作用影响,可以省略中间部分的操作项。比如对于宏定义参数可能存在不确定性的场景下尤为适用[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值