C优先级详细列表

Precedence

Operator

Description

Example

Associativity

1

()
[]
->
.
::
++
--

Grouping operator
Array access
Member access from a pointer
Member access from an object
Scoping operator
Post-increment
Post-decrement

(a + b) / 4;
array[4] = 2;
ptr->age = 34;
obj.age = 34;
Class::age = 2;
for( i = 0; i < 10; i++ ) ...
for( i = 10; i > 0; i-- ) ...

left to right

2

!
~
++
--
-
+
*
&
(type)
sizeof

Logical negation
Bitwise complement
Pre-increment
Pre-decrement
Unary minus
Unary plus
Dereference
Address of
Cast to a given type
Return size in bytes

if( !done ) ...
flags = ~flags;
for( i = 0; i < 10; ++i ) ...
for( i = 10; i > 0; --i ) ...
int i = -1;
int i = +1;
data = *ptr;
address = &obj;
int i = (int) floatNum;
int size = sizeof(floatNum);

right to left

3

->*
.*

Member pointer selector
Member pointer selector

ptr->*var = 24;
obj.*var = 24;

left to right

4

*
/
%

Multiplication
Division
Modulus

int i = 2 * 4;
float f = 10 / 3;
int rem = 4 % 3;

left to right

5

+
-

Addition
Subtraction

int i = 2 + 3;
int i = 5 - 1;

left to right

6

<<
>>

Bitwise shift left
Bitwise shift right

int flags = 33 << 1;
int flags = 33 >> 1;

left to right

7

<
<=
>
>=

Comparison less-than
Comparison less-than-or-equal-to
Comparison greater-than
Comparison geater-than-or-equal-to

if( i < 42 ) ...
if( i <= 42 ) ...
if( i > 42 ) ...
if( i >= 42 ) ...

left to right

8

==
!=

Comparison equal-to
Comparison not-equal-to

if( i == 42 ) ...
if( i != 42 ) ...

left to right

9

&

Bitwise AND

flags = flags & 42;

left to right

10

^

Bitwise exclusive OR

flags = flags ^ 42;

left to right

11

|

Bitwise inclusive (normal) OR

flags = flags | 42;

left to right

12

&&

Logical AND

if( conditionA && conditionB ) ...

left to right

13

||

Logical OR

if( conditionA || conditionB ) ...

left to right

14

? :

Ternary conditional (if-then-else)

int i = (a > b) ? a : b;

right to left

15

=
+=
-=
*=
/=
%=
&=
^=
|=
<<=
>>=

Assignment operator
Increment and assign
Decrement and assign
Multiply and assign
Divide and assign
Modulo and assign
Bitwise AND and assign
Bitwise exclusive OR and assign
Bitwise inclusive (normal) OR and assign
Bitwise shift left and assign
Bitwise shift right and assign

int a = b;
a += 3;
b -= 4;
a *= 5;
a /= 2;
a %= 3;
flags &= new_flags;
flags ^= new_flags;
flags |= new_flags;
flags <<= 2;
flags >>= 2;

right to left

16

,

Sequential evaluation operator

for( i = 0, j = 0; i < 10; i++, j++ ) ...

left to righ

### C语言中switch case语句的使用规范 在C语言中,`switch-case`语句是一种多分支选择结构,用于根据表达式的值执行不同的代码块。每个`case`标签后可以包含一组语句,但是否需要`break`取决于具体需求[^2]。 如果某个`case`后面没有`break`,程序会继续执行后续的`case`代码,直到遇到`break`或`switch`语句结束为止。这种现象被称为“贯穿”或“fall-through”。例如,在以下代码中: ```c #include <stdio.h> int main() { int k = 5, n = 0; while (k > 0) { switch (k) { case 1: n += k; case 2: case 3: n += k; default: break; } k--; } printf("%d\n", n); return 0; } ``` 由于`case 1`和`case 2`、`case 3`之间缺少`break`,当`k`等于1时,程序不仅会执行`n += k;`,还会继续执行`case 2`和`case 3`的代码[^1]。 因此,`break`并不是必须的,但如果没有它,可能会导致意外的行为。为了确保逻辑清晰且符合预期,通常建议在每个`case`结束后添加`break`[^4]。 --- ### C语言运算符优先级 C语言中的运算符按照优先级从高到低排列,影响表达式计算顺序。以下是常见的运算符及其优先级(从高到低): 1. **括号**:`()`[^3] 2. **一元运算符**:`++`、`--`、`+`、`-`、`!`、`~`[^3] 3. **算术运算符**:`*`、`/`、`%`[^3] 4. **关系运算符**:`<`、`<=`、`>`、`>=`[^3] 5. **相等运算符**:`==`、`!=`[^3] 6. **位运算符**:`&`、`^`、`|` 7. **逻辑运算符**:`&&`、`||`[^3] 8. **赋值运算符**:`=`, `+=`, `-=` 等 例如,在以下代码中: ```c #include <stdio.h> void main() { int num = 5; int result = num++; printf("result = %d\n", result); } ``` 这里`num++`是一个后置自增运算符,优先级高于赋值运算符`=`, 因此先将`num`的值赋给`result`,然后`num`加1。 --- ### 示例代码 以下是一个完整的`switch-case`示例,展示了如何正确使用`break`以及运算符优先级的影响: ```c #include <stdio.h> int main() { int x = 2 + 3 * 4; // 运算符优先级:先计算乘法再加法 printf("x = %d\n", x); switch (x) { case 14: printf("Case 14 executed\n"); break; // 防止fall-through case 15: printf("Case 15 executed\n"); // 缺少break会导致执行下一个case case 16: printf("Case 16 executed\n"); break; default: printf("Default case executed\n"); } return 0; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值