Toán tử dịch bit

Một phần của tài liệu Giáo trình lập trình hướng đối tượng c trường cao đẳng công nghiệp huế (Trang 40 - 42)

Các toán tử này được sử dụng để tính toán trên các số nguyên bằng cách tính toán trên các bit.

Toán tử Kết quả

~ Toán tử phủ định bit. Các bit 1 sẽ chuyển thành 0 và ngược lại. Ví dụ ~101=010.

&

Toán tử hội bit. Hội của hai bit 1 bằng 1. Trong mọi trường hợp còn lại, ta nhận được 0.

Ví dụ.

1 0 1 1 (tương ứng 11 trong hệ thập phân) & 0 1 0 1 (tương ứng với 5 trong hệ thập phân)

0 0 0 1 (tương ứng với 1 trong hệ thập phân) Nghĩa là 11&5=1.

|

Toán tử tuyển bit. Tuyển của hai bit 0 bằng 0. Trong mọi trường hợp còn lại, ta nhận được 1.

Ví dụ.

1 0 1 1 (tương ứng 11 trong hệ thập phân) | 0 0 0 1 (tương ứng với 1 trong hệ thập phân)

1 0 1 1 (tương ứng với 11 trong hệ thập phân) Nghĩa là 11|1=11.

^

Toán tử tuyển loại bit. Tuyển loại của hai bit khác nhau bằng 1. Trong mọi trường hợp còn lại, ta nhận được 0.

Ví dụ.

1 0 1 1 (tương ứng 11 trong hệ thập phân) ^ 0 0 0 1 (tương ứng với 1 trong hệ thập phân)

1 0 1 0 (tương ứng với 10 trong hệ thập phân) Nghĩa là 11^1=10.

>>

Toán tử dịch bit sang phải. Dịch chuyển toàn bộ dãy bit sang phải theo số bit được chỉ định. Nếu là số dương, ta bổ sung các bit 0 vào đầu. Nếu là số âm, ta bổ sung các số 1 vào đầu.

Ví dụ.

Đối với số dương

C

+

+

>> 1 dịch sang phải 1 bit

… 0 0 1 0 1 (tương ứng với 5 trong hệ thập phân) Nghĩa là 11>>1=5.

Đối với số âm

1 1 1 0 1 1 (tương ứng -11 trong hệ thập phân)

>> 2 dịch sang phải 2 bit

… 1 1 1 1 1 0 (tương ứng -3 trong hệ thập p ân) Nghĩa là -11>>2=-3.

Các bạn cũng cần lưu ý rằng, trong các biểu diễn ở trên, nếu hệ thống được chọn là 32 bit, thì chúng ta cần lấp đầy số bit này:

- Nếu số dương thì các bit còn lại sẽ được bổ sung 0 vào phía trước. - Nếu số âm thì các bit còn lại sẽ được bổ sung 1 vào phía trước.

Trong các ví dụ trên, phần dãy bit để trắng tương ứng với bit dấu – 1 tương ứng với – và 0 tương ứng với +.

<<

Toán tử dịch bit sang trái. Dịch chuyển toàn bộ dãy bit sang trái theo số bit được chỉ định.

Ví dụ.

Đối với số dương

+ 0 0 1 0 1 1 (tương ứng 11 trong hệ thập phân)

<< 2 dịch sang trái 2 bit

1 0 1 1 0 0 (tương ứng 44 trong hệ thập phân) Nghĩa là 11<<2=44. &= |= ^= >>= <<=

Các phép toán gán hợp nhất trên bit.

Các toán tử hội bit, tuyển bit, tuyển loại bit và phủ định bit được tính như sau: chúng ta chuyển đổi các số thập phân sang nhị phân tương ứng, sau đó sử dụng các phép toán tương ứng cho từng bit theo vị trí của nó. Ví dụ như ở trên 210=102, 310=112 và ta sẽ thực hiện các phép toán tương ứng với từng bit. Bit thứ nhất (từ phải sang trái) là 0&1=1, bit thứ hai 1&1=1, như vậy kết quả của phép toán 2&3 là 112 hay 310. Tương tự cho các phép toán còn lại. Nếu hai số có độ dài bit khác nhau, thì ta chỉ việc bổ sung thêm 0 ở số có độ dài bit ngắn hơn, sau đó thực hiện các phép toán như đã nêu. Trong trường hợp này, ta cần lưu ý rằng phép toán tuyển loại sẽ có chân trị là 1 nếu hai bit tương ứng là khác nhau, nếu giống nhau thì tương ứng là 0(1^1=0^0=0, 1^0=0^1=1). Các phép toán hội, tuyển và phủ định vẫn còn đúng như phép toán hội, tuyển và phủ định trên kiểu dữ liệu logic.

Các toán tử dịch trái bit << và dịch phải bit >> nếu thực hiện trực tiếp trên số nguyên hệ thập phân, sẽ được tính như sau: a<<b=a*2b và a>>b=a/2b.

C

+

+

1.4.10. Toán tử chuyển đổi kiểu dữ liệu

Toán tử này dùng để chuyển đổi một biến hay hằng thuộc kiểu dữ liệu này sang kiểu dữ liệu khác. Giả sử ta có biến int a = 3, int b = 2. Khi thực hiện phép chia để nhận được kết quả thực, ta chỉ cần viết như sau: (float)3/2. Hãy lưu ý rằng số 3 ở đây đã bị chuyển thành kiểu thực, và việc thực hiện phép chia một số thực cho số nguyên sẽ trả về kiểu thực 1.5. Nếu ta viết 3/(float)2, kết quả cũng tương tự. Ngược lại, nếu viết (float)(3/2) thì kết quả lại khác. Sở dĩ như vậy là vì, nó sẽ thực hiện phép chia nguyên 3/2 (kết quả là 1), sau đó nó sẽ chuyển giá trị 1 nguyên này sang 1 thực. Do đó, giá trị thu được vẫn là 1, nhưng thuộc kiểu số thực (tức là 1.0f).

Cách biểu diễn sự chuyển đổi một biến thuộc kiểu dữ liệu này, sang kiểu khác chỉ có thể thực hiện nếu kiểu của chúng tương đương. Ta có thể chuyển số thành số (sau này khi học về hướng đối tượng, ta có thể chuyển giữa các đối tượng trong cùng một cây phả hệ). Ta không thể chuyển đổi từ số thành xâu, hay ngược lại (bằng cách thực hiện phép toán chuyển đổi kiểu). Ta có thể chuyển đổi một xâu số thành số và một số thành xâu số bằng nhiều cách khác nhau, nhưng việc sử dụng toán tử chuyển đổi kiểu là không được phép. Khi chuyển đổi, ta sử dụng một trong các cú pháp sau: (kiểu_dữ_liệu)biến hoặc (kiểu_dữ_liệu)(biến)

hoặc kiểu_dữ_liệu(biến). Chúng ta nên sử dụng kiểu thứ 2 hoặc 3 để tránh các

nhầm lẫn đáng tiếc khi biểu thức phức tạp.

Một phần của tài liệu Giáo trình lập trình hướng đối tượng c trường cao đẳng công nghiệp huế (Trang 40 - 42)