Các phép toán trong C ++

Toán tử là biểu tượng cho trình biên dịch thực hiện các thao tác toán học hoặc logic cụ thể. C++ rất giàu các toán tử dựng sẵn và cung cấp các loại toán tử sau:

  • Toán tử số học
  • Các nhà khai thác quan hệ
  • Toán tử hợp lý
  • Nhà khai thác bitwise
  • Toán tử chuyển nhượng
  • Nhà khai thác Misc

Chương này sẽ kiểm tra số học, quan hệ, logic, bitwise, phân công và các nhà khai thác khác từng người một.

Toán tử số học

Có các toán tử số học sau được hỗ trợ bởi ngôn ngữ C ++ –

Giả sử biến A giữ 10 và biến B giữ 20, sau đó –

Nhà điều hành Sự miêu tả Thí dụ
+ Thêm hai toán hạng A + B sẽ cho 30
– – Trừ toán hạng thứ hai từ toán hạng nhất A – B sẽ cho -10
* Nhân cả hai toán hạng A * B sẽ cho 200
/ Chia lấy phần nguyên B / A sẽ cho 2
% Chia lấy phần dư B% A sẽ cho 0
++ Tăng giá trị số nguyên lên một A ++ sẽ cho 11
– – Giảm giá trị số nguyên xuống một A– sẽ cho 9

Các nhà khai thác quan hệ

Có những toán tử quan hệ được hỗ trợ bởi ngôn ngữ C ++

Giả sử biến A giữ 10 và biến B giữ 20, sau đó –

Nhà điều hành Sự miêu tả Thí dụ
== Kiểm tra xem các giá trị của hai toán hạng có bằng nhau hay không, nếu có thì điều kiện trở thành true. (A == B) =>false
! = Kiểm tra xem các giá trị của hai toán hạng có bằng nhau hay không, nếu các giá trị không bằng nhau thì điều kiện trở thành true. (A! = B) =>true
> Kiểm tra nếu giá trị của toán hạng bên trái lớn hơn giá trị của toán hạng bên phải, nếu có thì điều kiện trở thành true. (A> B) l=>false
< Kiểm tra nếu giá trị của toán hạng bên trái nhỏ hơn giá trị của toán hạng bên phải, nếu có thì điều kiện trở thành true. (A <B) =>true
> = Kiểm tra nếu giá trị của toán hạng bên trái lớn hơn hoặc bằng giá trị của toán hạng bên phải, nếu có thì điều kiện trở thành true. (A> = B) =>false
<= Kiểm tra nếu giá trị của toán hạng bên trái nhỏ hơn hoặc bằng giá trị của toán hạng bên phải, nếu có thì điều kiện trở thành true. (A <= B) =>true

Toán tử Logical

Có những toán tử logic được hỗ trợ bởi ngôn ngữ C ++.

Giả sử biến A giữ 1 và biến B giữ 0, sau đó –

Nhà điều hành Sự miêu tả Thí dụ
&& Được gọi là toán tử logic và được gọi. Nếu cả hai toán hạng đều khác 0 thì điều kiện trở thành true. (A && B) là sai
|| Được gọi là logic hoặc toán tử. Nếu bất kỳ toán tử nào trong số hai toán hạng không khác, thì điều kiện trở thành true. (A || B) là đúng.
! Được gọi là Operical NOT Operator.Sử dụng để đảo ngược trạng thái logic của toán hạng của nó. Nếu điều kiện là đúng, thì toán tử logic NOT sẽ sai. ! (A && B) là sự thật.

Nhà khai thác bitwise

Toán tử bitwise hoạt động trên các bit và thực hiện thao tác bit-by-bit. Các bảng chân lý cho &, |, và ^ như sau:

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

Giả sử nếu A = 60; và B = 13; bây giờ ở định dạng nhị phân, chúng sẽ như sau:

A = 0011 1100

B = 0000 1101

—————–

A & B = 0000 1100

A | B = 0011 1101

A ^ B = 0011 0001

~ A = 1100 0011

Các toán tử Bitwise được hỗ trợ bởi ngôn ngữ C ++ được liệt kê trong bảng sau. Giả sử biến A giữ 60 và biến B giữ 13, sau đó –

Nhà điều hành Sự miêu tả Thí dụ
& Binary AND Operator sao chép một chút vào kết quả nếu nó tồn tại trong cả hai toán hạng. (A & B) sẽ tặng 12 cái là 0000 1100
| Binary OR Operator copy một chút nếu nó tồn tại trong toán hạng. (A | B) sẽ cho 61 là 0011 1101
^ Nhà điều hành XOR nhị phân sao chép bit nếu nó được đặt trong một toán hạng nhưng không phải cả hai. (A ^ B) sẽ cho 49 là 0011 0001
~ Binary Ones Complement Operator là unary và có tác dụng của ‘flipping’ bit. (~ A) sẽ cung cấp cho -61 là 1100 0011 trong dạng bổ sung của 2 do một số nhị phân có dấu.
<< Trình điều khiển Shift trái nhị phân.Giá trị toán hạng bên trái được di chuyển sang trái bởi số bit được chỉ định bởi toán hạng bên phải. Một << 2 sẽ cho 240 là 1111 0000
>> Trình điều khiển Shift phải nhị phân. Giá trị toán hạng bên trái được di chuyển ngay bởi số bit được chỉ định bởi toán hạng bên phải. A >> 2 sẽ cho 15 là 0000 1111

Toán tử chuyển nhượng

Có các toán tử gán sau được hỗ trợ bởi ngôn ngữ C ++ –

Nhà điều hành Sự miêu tả Thí dụ
= Toán tử gán đơn giản, gán giá trị từ toán hạng bên phải sang toán hạng bên trái. C = A + B sẽ gán giá trị của A + B vào C
+ = Thêm toán tử gán AND, nó thêm toán hạng bên phải vào toán hạng bên trái và gán kết quả cho toán hạng bên trái. C + = A tương đương với C = C + A
– = Subtract AND assignment operator, Nó trừ toán hạng bên phải từ toán hạng bên trái và gán kết quả cho toán hạng bên trái. C – = A tương đương với C = C – A
* = Nhân và toán tử gán, Nó nhân toán hạng bên phải với toán hạng bên trái và gán kết quả cho toán hạng bên trái. C * = A tương đương với C = C * A
/ = Divide AND assignment operator, Nó chia toán hạng bên trái với toán hạng bên phải và gán kết quả cho toán hạng bên trái. C / = A tương đương với C = C / A
% = Toán tử mô-đun và gán, Nó lấy mô đun bằng cách sử dụng hai toán hạng và gán kết quả cho toán hạng bên trái. C% = A tương đương với C = C% A
<< = Toán tử trái và toán tử gán. C << = 2 cũng giống như C = C << 2
>> = Toán tử chuyển đổi và chuyển quyền. C >> = 2 giống như C = C >> 2
& = Toán tử bitwise AND assignment. C & = 2 giống C = C & 2
^ = Nhà điều hành HOẶC phân công độc quyền bitwise. C ^ = 2 giống như C = C ^ 2
| = OR OR và toán tử gán. C | = 2 giống như C = C | 2

Nhà khai thác Misc

Bảng sau liệt kê một số toán tử khác mà C ++ hỗ trợ.

Sr.No Toán tử & Mô tả
1 sizeof

 trả về kích thước của một biến. Ví dụ, sizeof (a), trong đó ‘a’ là số nguyên và sẽ trả về 4.

2 Điều kiện ? X: Y

Nếu Điều kiện là đúng thì nó trả về giá trị của X nếu không trả về giá trị của Y.

3 ,

gây ra một chuỗi các phép toán được thực hiện. Giá trị của toàn bộ biểu thức dấu phẩy là giá trị của biểu thức cuối cùng của danh sách được phân cách bằng dấu phẩy.

4 . (dấu chấm) và -> (mũi tên)

được sử dụng để tham chiếu các thành viên cá nhân của các lớp, các cấu trúc và các công đoàn.

5
Cast

chuyển đổi một kiểu dữ liệu sang kiểu dữ liệu khác. Ví dụ, int (2.2000) sẽ trả về 2.

6 &

trả về địa chỉ của một biến. Ví dụ & a; sẽ cung cấp địa chỉ thực của biến.

7 *

con trỏ * là con trỏ đến một biến. Ví dụ * var; sẽ trỏ đến biến var.

Các toán tử ưu tiên trong C ++

Ưu tiên toán tử xác định nhóm các thuật ngữ trong một biểu thức. Điều này ảnh hưởng đến cách một biểu thức được đánh giá. Một số nhà khai thác có quyền ưu tiên cao hơn so với các nhà khai thác khác; ví dụ, toán tử nhân có ưu tiên cao hơn toán tử cộng –

Ví dụ x = 7 + 3 * 2; ở đây, x được gán 13, không phải 20 vì toán tử * có ưu tiên cao hơn +, vì vậy trước tiên nó được nhân với 3 * 2 và sau đó thêm vào 7.

Ở đây, các toán tử có mức ưu tiên cao nhất xuất hiện ở đầu bảng, các toán tử có giá trị thấp nhất xuất hiện ở dưới cùng. Trong một biểu thức, các toán tử ưu tiên cao hơn sẽ được đánh giá đầu tiên.

thể loại Nhà điều hành Khả năng tương tác
Postfix () [] ->. ++ – – Trái sang phải
Unary + -! ~ ++ – – (loại) * và kích thước Phải sang trái
Nhân * /% Trái sang phải
Phụ gia + – Trái sang phải
Shift << >> Trái sang phải
Quan hệ <<=>> = Trái sang phải
Bình đẳng ==! = Trái sang phải
Bitwise AND & Trái sang phải
Bitwise XOR ^ Trái sang phải
Bitwise HOẶC | Trái sang phải
Logic và && Trái sang phải
Hợp lý HOẶC || Trái sang phải
Điều kiện ?: Phải sang trái
Nhiệm vụ = + = – = * = / =% = >> = << = & = ^ = | = Phải sang trái
Dấu phẩy , Trái sang phải

Kiểu Modifier trong C++

C ++ cho phép các kiểu dữ liệu char, int và double có các modifier trước chúng. Công cụ sửa đổi được sử dụng để thay đổi ý nghĩa của loại cơ sở sao cho phù hợp hơn với nhu cầu của các tình huống khác nhau.

Các công cụ sửa đổi kiểu dữ liệu được liệt kê ở đây –

    • signed
    • unsigned
    • long
    • short

Các modifier được signed, unsigned, long và short có thể được áp dụng cho các kiểu cơ số nguyên. Ngoài ra, signed và unsigned có thể được áp dụng cho char, và long có thể được áp dụng để tăng gấp đôi.Các modifier được signed và unsigned cũng có thể được sử dụng làm tiền tố cho các modifier short hoặc long . Ví dụ: unsigned long int .

C ++ cho phép ký hiệu viết tắt để khai báo các số nguyên unsigned, short hoặc long . Bạn chỉ có thể sử dụng từ unsigned, short, hoặc long, mà không có int . Nó tự động ngụ ý int . Ví dụ, hai câu lệnh sau đây đều khai báo các biến số nguyên không dấu.

unsigned x;
unsigned int y;
Để hiểu sự khác biệt giữa cách thức các biến số nguyên được ký và unsigned nguyên được giải thích bởi C ++, bạn nên chạy chương trình ngắn sau đây –
#include 
using namespace std;
 
/* This program shows the difference between
   * signed and unsigned integers.
*/
int main() {
   short int i;           // a signed short integer
   short unsigned int j;  // an unsigned short integer

   j = 50000;

   i = j;
   cout << i << " " << j;

   return 0;
}
Khi chương trình này được chạy, sau đây là đầu ra –
-15536 50000
Kết quả trên là vì mẫu bit đại diện cho 50.000 như một số nguyên không dấu ngắn được hiểu là -15,536 bởi một đoạn ngắn.

Loại vòng loại trong C ++

Các loại vòng loại cung cấp thêm thông tin về các biến mà chúng đứng trước.

Sr.No Vòng loại & Ý nghĩa
1 const

Đối tượng của loại const không thể được thay đổi bởi chương trình của bạn trong quá trình thực thi.

2 volatile

Công cụ sửa đổi volatile nói với trình biên dịch rằng giá trị của biến có thể được thay đổi theo các cách không được chương trình xác định rõ ràng.

3 restrict

Một con trỏ đủ điều kiện theo restrict ban đầu là phương tiện duy nhất mà đối tượng nó trỏ đến có thể được truy cập. Chỉ C99 mới thêm một loại vòng loại mới được gọi là giới hạn.

Các loại biến trong C ++

Một biến cung cấp cho chúng ta lưu trữ có tên là các chương trình của chúng ta có thể thao tác. Mỗi biến trong C ++ có một kiểu cụ thể, xác định kích cỡ và bố cục của bộ nhớ của biến; phạm vi của các giá trị có thể được lưu trữ trong bộ nhớ đó; và tập hợp các hoạt động có thể được áp dụng cho biến.

Tên của một biến có thể bao gồm các chữ cái, chữ số và ký tự gạch dưới. Nó phải bắt đầu bằng chữ cái hoặc dấu gạch dưới. Chữ hoa và chữ thường khác biệt vì C ++ phân biệt chữ hoa chữ thường –

Có các loại biến cơ bản sau trong C ++ như được giải thích trong chương trước

Sr.No Loại & mô tả
1 bool

Lưu trữ giá trị đúng hoặc sai.

2 char

Thông thường một octet đơn (một byte). Đây là một loại số nguyên.

3 int

Kích thước tự nhiên nhất của số nguyên cho máy.

4 float

Giá trị dấu phẩy động chính xác đơn.

5 double

Giá trị dấu phẩy động kép chính xác.

6 void

Đại diện cho sự vắng mặt của loại.

7 wchar_t

Một loại ký tự rộng.

C ++ cũng cho phép xác định các loại biến khác nhau, chúng tôi sẽ đề cập đến trong các chương tiếp theo như Liệt kê, Con trỏ, Mảng, Tham chiếu, Cấu trúc dữ liệu và Lớp học .

Phần sau sẽ bao gồm cách xác định, khai báo và sử dụng các loại biến khác nhau.

Biến định nghĩa trong C ++

Một định nghĩa biến cho trình biên dịch biết đâu và dung lượng lưu trữ để tạo ra biến đó. Một định nghĩa biến xác định một kiểu dữ liệu và chứa một danh sách của một hoặc nhiều biến kiểu đó như sau:

type variable_list;
Ở đây, type phải là kiểu dữ liệu C ++ hợp lệ bao gồm char, w_char, int, float, double, bool hoặc bất kỳ đối tượng do người dùng xác định, v.v. và variable_list có thể bao gồm một hoặc nhiều tên định danh được phân tách bằng dấu phẩy. Một số khai báo hợp lệ được hiển thị ở đây –
int    i, j, k;
char   c, ch;
float  f, salary;
double d;
Dòng int i, j, k; cả hai khai báo và định nghĩa các biến i, j và k; hướng dẫn trình biên dịch tạo các biến có tên là i, j và k của kiểu int.

Các biến có thể được khởi tạo (gán một giá trị ban đầu) trong khai báo của chúng. Trình khởi tạo bao gồm một dấu bằng, theo sau là một biểu thức liên tục như sau:

type variable_name = value;
Một số ví dụ là –
extern int d = 3, f = 5;    // declaration of d and f. 
int d = 3, f = 5;           // definition and initializing d and f. 
byte z = 22;                // definition and initializes z. 
char x = 'x';               // the variable x has the value 'x'.
Đối với định nghĩa không có bộ khởi tạo: các biến có thời gian lưu trữ tĩnh được khởi tạo ngầm với NULL (tất cả các byte có giá trị 0); giá trị ban đầu của tất cả các biến khác là không xác định.

Tuyên bố biến trong C ++

Một khai báo biến cung cấp sự đảm bảo cho trình biên dịch rằng có một biến tồn tại với kiểu và tên đã cho để trình biên dịch tiến hành biên dịch thêm mà không cần chi tiết đầy đủ về biến. Một khai báo biến có ý nghĩa của nó tại thời điểm biên dịch chỉ, trình biên dịch cần định nghĩa biến thực sự tại thời điểm liên kết của chương trình.

Một khai báo biến hữu ích khi bạn đang sử dụng nhiều tệp và bạn xác định biến của mình trong một trong các tệp sẽ có sẵn tại thời điểm liên kết của chương trình. Bạn sẽ sử dụng từ khóa bên  extern để khai báo biến ở bất kỳ nơi nào. Mặc dù bạn có thể khai báo một biến nhiều lần trong chương trình C ++ của bạn, nhưng nó có thể được định nghĩa chỉ một lần trong một tệp, một hàm hoặc một khối mã.

Thí dụ

Hãy thử ví dụ sau, nơi một biến đã được khai báo ở trên cùng, nhưng nó đã được định nghĩa bên trong hàm main –

#include <iostream>
using namespace std;

// Variable declaration:
extern int a, b;
extern int c;
extern float f;
  
int main () {
   // Variable definition:
   int a, b;
   int c;
   float f;
 
   // actual initialization
   a = 10;
   b = 20;
   c = a + b;
 
   cout << c << endl ;

   f = 70.0/3.0;
   cout << f << endl ;
 
   return 0;
}
Khi mã trên được biên dịch và thực hiện, nó tạo ra kết quả sau:
30
23.3333
Cùng một khái niệm được áp dụng trên khai báo hàm, trong đó bạn cung cấp tên hàm tại thời điểm khai báo và định nghĩa thực tế của nó có thể được đưa ra ở bất kỳ nơi nào khác. Ví dụ –
// function declaration
int func();
int main() {
   // function call
   int i = func();
}

// function definition
int func() {
   return 0;
}

Lvalues ​​và Rvalues

Có hai loại biểu thức trong C ++ –

  • lvalue – Các biểu thức tham chiếu đến một vị trí bộ nhớ được gọi là biểu thức “lvalue”. Một giá trị có thể xuất hiện ở bên trái hoặc bên tay phải của một nhiệm vụ.
  • rvalue – Giá trị rvalue đề cập đến một giá trị dữ liệu được lưu trữ tại một số địa chỉ trong bộ nhớ. Một rvalue là một biểu thức mà không thể có một giá trị được gán cho nó có nghĩa là một rvalue có thể xuất hiện ở bên phải nhưng không phải bên trái của một nhiệm vụ.

Các biến là các giá trị và do đó có thể xuất hiện ở phía bên trái của một nhiệm vụ. Chữ số là giá trị và do đó có thể không được gán và không thể xuất hiện ở phía bên tay trái. Sau đây là một tuyên bố hợp lệ –

int g = 20;
Nhưng sau đây không phải là một tuyên bố hợp lệ và sẽ tạo ra lỗi thời gian biên dịch –
10 = 20;