c语言判断两数大小并赋值的语句有哪些?时间复杂度各是多少?
时间: 2024-10-08 17:06:17 浏览: 26
C语言-求最大值及其下标
在C语言中,判断两个整数a和b的大小并赋值主要有几种方法:
1. **使用if...else结构**:
```c
int a, b;
if (a > b) {
b = a; // 如果a较大,则b赋值为a
} else if (a < b) {
a = b; // 否则如果a较小,则a赋值为b
} else {
a = b = 0; // 如果相等,可以选择任意一个赋值或都保持不变
}
```
时间复杂度是O(1),因为它只执行一次比较。
2. **使用三目运算符(也称条件运算符)**:
```c
a = (a > b) ? a : b; // 直接将较大的数赋给a
```
同样也是O(1)的时间复杂度。
3. **使用位操作(假设无溢出)**:
这种方法适用于整数范围足够大,并且不需要考虑负数的情况。通过异或(XOR)、与(&)、左移(shift)可以快速判断:
```c
if ((a ^ b) & -(a < b)) { // 非法的a < b会变成非零,合法则结果为0
a = a ^ b; // 如果a大于b,a^b等于a
}
```
注意这不是标准做法,仅在特定场景下有效,且依赖于数据范围,因此不建议用于一般情况。
阅读全文