Nhà điều hành C

Giới thiệu về Toán tử C và mức độ ưu tiên của Toán tử

C cung cấp cho chúng tôi nhiều loại toán tử mà chúng tôi có thể sử dụng để vận hành trên dữ liệu.

Đặc biệt, chúng tôi có thể xác định các nhóm toán tử khác nhau:

  • toán tử số học
  • Toán tử so sánh
  • toán tử logic
  • toán tử gán ghép
  • toán tử bitwise
  • con trỏcác nhà khai thác
  • toán tử cấu trúc
  • toán tử linh tinh

Trong bài đăng trên blog này, tôi sẽ trình bày chi tiết tất cả chúng, sử dụng 2 biến tưởng tượngablàm ví dụ.

Tôi sẽ giữ các toán tử bitwise, toán tử cấu trúc và toán tử con trỏ ra khỏi danh sách này, vì tôi sẽ dành cho chúng một bài đăng trên blog cụ thể.

Toán tử số học

Trong nhóm macro này, tôi sẽ phân tách toán tử nhị phân và toán tử đơn phân.

Toán tử nhị phân hoạt động bằng cách sử dụng hai toán hạng:

Nhà điều hành Tên Thí dụ
= Chuyển nhượng a = b
+ Thêm vào a + b
- Phép trừ a - b
* Phép nhân a * b
/ Sư đoàn a / b
% Modulo a % b

Toán tử đơn nguyên chỉ nhận một toán hạng:

Nhà điều hành Tên Thí dụ
+ Cộng một lần +a
- Trừ một bậc -a
++ Tăng a++hoặc là++a
-- Giảm dần a--hoặc là--a

Sự khác biệt giữaa++++ađó làa++gia tăngabiến sau khi sử dụng nó.++agia tăngatrước khi sử dụng nó.

Ví dụ:

int a = 2;
int b;
b = a++ /* b is 2, a is 3 */
b = ++a /* b is 4, a is 4 */

Điều tương tự cũng áp dụng cho toán tử giảm dần.

Toán tử so sánh

Nhà điều hành Tên Thí dụ
== Toán tử bình đẳng a == b
!= Toán tử không bình đẳng a != b
> To hơn a > b
< Ít hơn a < b
>= Lớn hơn hoặc bằng a >= b
<= Ít hơn hoặc bằng a <= b

Toán tử logic

  • !KHÔNG (ví dụ:!a)
  • &&VÀ (ví dụ:a && b)
  • ||HOẶC (ví dụ:a || b)

Các toán tử đó rất tuyệt khi làm việc với các giá trị boolean.

Toán tử gán ghép

Các toán tử này rất hữu ích để thực hiện một phép gán và đồng thời thực hiện một phép toán số học:

Nhà điều hành Tên Thí dụ
+= Bài tập bổ sung a += b
-= Phép trừ a -= b
*= Phép nhân a *= b
/= Phân công bộ phận a /= b
%= Chuyển nhượng modulo a %= b

Các toán tử khác

Toán tử bậc ba

Toán tử bậc ba là toán tử duy nhất trongChoạt động với 3 toán hạng và đó là một cách ngắn gọn để thể hiện các điều kiện.

Cái này nó thì trông như thế nào:

<condition> ? <expression> : <expression>

Thí dụ:

a ? b : c

Nếuađược đánh giá đểtrue, sau đóbcâu lệnh được thực thi, nếu khôngcLà.

Toán tử bậc ba có chức năng tương tự như điều kiện if / else, ngoại trừ nó ngắn hơn để diễn đạt và nó có thể được nội dòng thành một biểu thức.

kích thước

Cácsizeoftoán tử trả về kích thước của toán hạng bạn vượt qua. Bạn có thể truyền một biến hoặc thậm chí một kiểu.

Ví dụ sử dụng:

#include <stdio.h>

int main(void) {
  int age = 37;
  printf("%ld\n", sizeof(age));
  printf("%ld", sizeof(int));
}

Ưu tiên điều hành

Với tất cả các toán tử đó (và nhiều toán tử khác mà tôi chưa đề cập trong bài đăng này, bao gồm bitwise, toán tử cấu trúc và toán tử con trỏ), chúng ta phải chú ý khi sử dụng chúng cùng nhau trong một biểu thức duy nhất.

Giả sử chúng ta có thao tác này:

int a = 2;
int b = 4;
int c = b + a * a / b - a;

Giá trị củac? Chúng ta có nhận được phép cộng được thực hiện trước phép nhân và phép chia không?

Có một bộ quy tắc giúp chúng ta giải câu đố này.

Để từ mức độ ưu tiên ít hơn đến mức độ ưu tiên cao hơn, chúng ta có:

  • các=điều hành viên phân công
  • các+- nhị phâncác nhà khai thác
  • các*/các nhà khai thác
  • các+-toán tử một ngôi

Các toán tử cũng có một quy tắc kết hợp, quy tắc này luôn từ trái sang phải ngoại trừ các toán tử một ngôi và phép gán.

Trong:

int c = b + a * a / b - a;

Đầu tiên chúng tôi thực hiệna * a / b, do được đặt từ trái sang phải, chúng tôi có thể tách thànha * avà kết quả/ b:2 * 2 = 4,4 / 4 = 1.

Sau đó, chúng ta có thể thực hiện tổng và trừ: 4 + 1 - 2. Giá trị củac3.

Tuy nhiên, trong mọi trường hợp, tôi muốn đảm bảo rằng bạn có thể sử dụng dấu ngoặc đơn để làm cho bất kỳ biểu thức tương tự nào dễ đọc và dễ hiểu hơn.

Dấu ngoặc đơn có mức độ ưu tiên cao hơn bất kỳ thứ gì khác.

Biểu thức ví dụ trên có thể được viết lại thành:

int c = b + ((a * a) / b) - a;

và chúng ta không phải nghĩ về nó nhiều như vậy.

Tải xuống miễn phí của tôiSổ tay C


Các hướng dẫn khác về tiếng clang: