Chương 11: Phép Thao Tác Trên Các Số Nhị Phân
Có thể bạn quan tâm
Lập Trình trong C | � 2003 Kishori Mundargi |
Chương 11:
Phép thao tác trên các số nhị phân
Như đã nói ở trên, ngôn ngữ lập trình C là một ngôn ngữ lập trình hệ thống. Do đó, nó cho phép các thao tác trên số nhị phân. Đối với những người làm việc liên quan đến lập trình hệ thống và giao diện máy tính, các toán tử trên số nhị phân cho phép họ truy cập vào bộ nhớ mà không cần phải viết mã nguồn theo ngôn ngữ máy, Tuy nhiên, trong những công việc thường ngày, những toán tử này ít được dùng . Trước khi đi vào chi tiết về những thao tác và các toán tử hiện tại đang có trong C, chúng ta hãy thảo luận một số điều căn bản sau đây:
Máy tính có thể hiểu được hệ thống số nhị phân. Hệ nhị phân có nghĩa là hệ thống gồm hai chữ số. Hệ nhị phân bao gồm số 0 và 1. Tôi cho rằng sinh viên ở đây đã khá quen thuộc với những hệ thống số học khác nhau cũng như cách chuyển đổi từ hệ thâp phân sang hệ nhị phân và ngược lại.
Trong hầu hết các hệ thống máy tính, một byte có tám bít. Mỗi bít có thể là 0 hoặc 1. Do đó, một byte là một chuỗi của những số 0 và 1. Bít ngoài cùng bên phải của chuỗi byte được gọi là bít có trọng số bé nhất và bít ngoài cùng bên trái được gọi là bít có trọng số lớn nhất. Số âm được miêu tả theo một cách khác. (Nhớ rằng, một số nguyên có thể có dấu hoặc không dấu.) Nếu như bít ngoài cùng bên trái là bít dấu và nếu nó là 1 thì chữ số đó là số âm, nếu nó là 0 thì đó là số dương.
Toán tử trên bít theo như tên gọi gợi ý, nó được dùng để thực hiện những thao tác trên cái số nhị phân. Những toán tử nhị phân có trong C được giới thiệu phía dưới đây:
|
Các toán tử logic trên bit
Thao tác luận lý cho hai kết quả, đó là đúng hoặc sai. Trong ký hiệu nhị phân, số 1 thể hiện cho Đúng và số 0 thể hiện cho sai. Một số nguyên được lưu trữ trong bộ nhớ có thể được xem như một chuỗi của những giá trị đúng và sai.
Những toán tử logic trên bít hoạt động trên những toán hạng mà theo đó có nhiệm vụ thực hiện tính toán trên từng từng bit để cho ra kết quả của một số nguyên.
Toán tử thao tác bit AND
Toán tử AND sẽ trả về giá trị là Đúng (1), nếu và chỉ nếu cả hai toán hạng đều có giá trị là 1.
|
Chương trình 11.1
|
Kết quả của chương trình như sau :
Giá trị của c là 9.
Toán tử AND xảy ra được thể hiện dưới đây:
|
Toán tử AND được sử dụng cho những thao tác mặt nạ . Toán tử này có thể được dùng để gán số 0 vào một số bít đặc biệt. Bạn cũng có thể sử dụng toán tử AND để kiểm tra xem một số nguyên là số lẻ hay chẵn. Khi bạn tiến hành toán tử AND trên một số nguyên với 1, thì kết quả luôn luôn là đúng nếu bít ngoài cùng bên phải của số nguyên đó là 1. Đây là trường hợp của số nguyên lẻ, đối với trường hợp số nguyên chẵn thì bít ngoài cùng bên phải sẽ là số 0.
Toán tử OR
Trong thao tác OR cũng vậy, chuỗi nhị phân của hai toán hạng được so sánh theo từng bít. Mỗi bít trong toán hạng đầu là 1 hoặc mỗi bít trong toán hạng thứ hai sẽ là 1 sẽ cho ra 1 trong bít tương ứng trong kết quả.
|
Toán tử OR được dùng khi bạn muốn gán số 1 cho một vài bít đặc biệt nào đó.
Toán tử XOR
Toán tử XOR sẽ cho ra 1 nếu một trong hai bít là số 1 nhưng không phải cả hai.
|
Một điều quan trọng đáng chú ý đó là bất cứ giá trị nào khi đã được XOR với chính nó sẽ cho ra kết quả là 0. Những người lập trình ngôn ngữ Assembly thường vận dụng điều này để kiểm chứng hai giá trị có bằng nhau không.
Toán tử phần bù số 1
Toán tử phần bù số 1 trong C được miêu tả như dấu ngã ~ Nó sẽ phủ định luận lí từng bit của toán hạng của nó, Nói theo cách khác, tất cả những giá trị 0 sẽ trở thành 1 và những giá trị 1 sẽ trở thành 0. Đây là toán tử một ngôi được dùng trên một hằng số nguyên hoặc trên một biểu thức.
Ví dụ
~ 12 ~ (Total - 2) Ở đây, Total phải là một số nguyên
Toán tử phần bù được dùng để giúp chương trình linh động hơn. Ví dụ như, nếu chúng ta muốn gán giá trị của bít ngoài cùng bên phải của một số nguyên cho 0 trên cả hai máy 16 bít và 32 bít, một cách khôn ngoan đó là chúng ta AND số đó với một số bù của nó.
Total& = ~1;
Nó sẽ trả kết quả ở dạng của số bù 1 với tất cả những bít 1 ở ngoài cùng bên trái cần thiết để lấp đầy kích cỡ của số nguyên. Nó sẽ bao gồm 15 số bít ở ngoài cùng bên trái trên một máy có 16 bít số nguyên, và 31 bít trên một máy với 32 bít số nguyên.
Toán tử dịch chuyển
Toán tử dịch trái hay dịch phải tương đồng với phép nhân và chia cho 10. Khi chúng ta chia một số cho 10, chúng ta sẽ dịch chuyển những con số một lần về phía phải bằng cách giữ lại dấu chấm thập phân. Khi chúng ta nhân một số với 10, chúng ta dịch các số về bên trái và thêm vào số 0 bên phải.
Toán tử dịch trái <<
Khi toán tử dịch trái được thực hiện trên một toán hạng, những bit của toán hạng được dịch về bên trái. Các bít bị chuyển sang trái bị mất và 0 thay vào phía bên phải của toán hạng.
If Salary là một biến với giá trị trong hệ bát phân là 6 , thì toán tử dịch trái sẽ cho ra kết quả là 14 trong hệ bát phân.
Chương trình 11.2
|
Toán tử dịch bit phải >>
Trong thao tác dịch bít phải, bít ở bên phải bị dịch chuyển sẽ bị mất và tùy thuộc vào loại của máy tính, số 1 hay số 0 sẽ được thêm vào ở bít ngoài cùng bên trái. Toán tử dịch chuyển cũng thường được nhắc đến như xoay trái và xoay phải.
Một số link hữu dụng: Eddie's basic guide to C Programmin
Từ khóa » Toán Tử Dịch Phải Bit
-
Phép Toán Thao Tác Bit – Wikipedia Tiếng Việt
-
BIT MATH – Các Phép Toán Thao Tác Trên Bit
-
Các Thao Tác Trên Bit — Modern C++ - STDIO
-
Phép Toán Thao Tác Bit Trong C++ (Bitwise Operation)
-
Hỏi Về Phép Dịch Phải Dịch Trái Trong C/c++ - Programming
-
Phép Toán Thao Tác Bit - Wiki Là Gì
-
C - Bài 08B: Toán Tử Thao Tác Trên Bit - YouTube
-
Toán Tử Dịch Bit - 123doc
-
Các Toán Tử Thao Tác Trên Bit - TEK4
-
Phép Toán Thao Tác Bit - VOER - Thư Viện Học Liệu Mở Việt Nam
-
Toán Tử Logic, Toán Tử Trên Bit Và Toán Tử Gán Trong C++ - Góc Học IT
-
Dịch Chuyển Và Quay Bit Phép_toán_thao_tác_bit - Tieng Wiki
-
Toán Tử Bitwise - Viblo
-
Toán Tử Thao Tác Bit Trong Java
-
Toán Tử Thao Tác Bit Trong Python
-
Các Toán Tử Bitwise - Openplanning
-
Tự Học C/C++ | Toán Tử Bitwise »
-
Fun With Bits - VNOI
-
Hiểu Nhanh Toán Tử Thao Tác Bit Trong Java - Techmaster