Bitwise Operators Trong C/C++ Là Gì? - Messy Blog
Có thể bạn quan tâm
Chuyển đến nội dung chính Chia sẻ Nhãn
- bitwise operator
- c
- c++
- công nghệ
- operator
- tech
- vi
Bitwise Operators Trong C/C++ là gì?
Bitwise Operator là gì?
Trong C, 6 toán tử sau được xếp vào bitwise operators (toán tử vận hành ở cấp bit)- & (bitwise AND) lấy hai số làm toán hạng và thực hiện AND lên từng bit của hai số này. Kết quả của AND sẽ chỉ là 1 cả hai bit đều cùng là 1.
- | (bitwise OR) lấy hai số làm toán hạng và thực hiện OR lên từng bit của hai số này. Kết quả của OR sẽ chỉ là 1 cả hai bit đều cùng là 1.
- ^ (bitwise XOR) lấy hai số làm toán hạng và thực hiện XOR lên từng bit của hai số này. Kết quả của XOR là 1 nếu hai bit khác nhau.
- << (left shift) Lấy hai số, chuyển bits của toán hạng đầu tiên sang trái, toán hạng thứ hai quyết định số chỗ trống cần dịch chuyển.
- >> (right shift) Lấy hai số, chuyển bits của toán hạng đầu tiên sang phải, toán hạng thứ hai quyết định số chỗ trống cần dịch chuyển.
- ~ (bitwise NOT) Lấy một số và nghịch đảo tất cả bit của số đó.
![]() |
| Bitwsie operator trong C |
Dưới đây là một số điều cần lưu ý về toán tử bitwise.
1) Không sử dụng các toán tử left shift và right shift cho số âm. Nếu bất kỳ toán hạng nào là số âm, kết quả sẽ là hành vi không xác định. Ví dụ: kết quả của cả -1 << 1 và 1 << -1 là không xác định. Ngoài ra, nếu số được shift nhiều hơn kích thước của số nguyên đó, hành vi cũng là không xác định. Ví dụ: 1 << 33 không xác định nếu số nguyên được lưu trữ với 32 bit. 2) Toán tử bitwise XOR là toán tử hữu ích nhất cho những buổi phỏng vấn technical. Nó được sử dụng để giải quyết rất nhiều vấn đề. Một ví dụ đơn giản: Được đưa ra một tập hợp các số trong đó tất cả các phần tử xảy ra số lần chẵn trừ một số, tìm số xảy ra lẻ lẻ Vấn đề này có thể được giải quyết một cách hiệu quả bằng cách thực hiện XOR tất cả các số. // Function to return the only odd occurring element int findOdd(int arr[], int n) { int res = 0, i; for (i = 0; i < n; i++) res ^= arr[i]; return res; } int main(void) { int arr[] = {12, 12, 14, 90, 14, 14, 14}; int n = sizeof(arr)/sizeof(arr[0]); printf ("The odd occurring element is %d ", findOdd(arr, n)); return 0; } // Output: The odd occurring element is 90 Còn nhiều vấn đề thú vị khác có thể được xử lý với toán tử XOR: Tìm số bị thiếu, hoán đổi hai số mà không sử dụng biến tạm thời, Tìm hai phần tử không lặp lại... 3) Các toán tử bitwise không nên được sử dụng thay cho các toán tử logic. Kết quả của các toán tử logic (&&, || và!) Là 0 hoặc 1, nhưng các toán tử bitwise lại trả về một giá trị nguyên. Ngoài ra, các toán tử logic coi bất kỳ toán hạng khác không là 1. Ví dụ, hãy xem xét chương trình sau, kết quả của & và && là khác nhau cho cùng toán hạng. int main() { int x = 2, y = 5; (x & y)? printf("True ") : printf("False "); (x && y)? printf("True ") : printf("False "); return 0; } // Output: False True 4) Toán tử left-shift và right-shift tương đương với phép nhân và chia cho 2 tương ứng. Như đã đề cập ở điểm 1, hai toán tử này chỉ làm việc với số dương. int main() { int x = 19; printf ("x << 1 = %d\n", x << 1); printf ("x >> 1 = %d\n", x >> 1); return 0; } // Output: 38 9 5) Toán tử & có thể được sử dụng để nhanh chóng kiểm tra xem một số là số lẻ hay chẵn Giá trị của biểu thức (x & 1) sẽ khác không chỉ khi x là số lẻ, nếu không giá trị sẽ bằng không. int main() { int x = 19; (x & 1)? printf("Odd"): printf("Even"); return 0; } // Output: Odd 6) Toán tử ~ nên được sử dụng một cách cẩn thận Kết quả của toán tử ~ trên một số nhỏ có thể là một số lớn nếu kết quả được lưu trữ trong một biến unsigned. Và kết quả có thể là một số âm nếu kết quả được lưu trữ trong một biến signed (giả sử rằng các số âm được lưu trữ ở dạng bổ sung của 2, trong đó bit ngoài cùng bên trái là sign bit). // Note that the output of the following program is compiler dependent int main() { unsigned int x = 1; printf("Signed Result %d \n", ~x); printf("Unsigned Result %ud \n", ~x); return 0; } /* Output: Signed Result -2 Unsigned Result 4294967294d */ Bạn hãy đọc thêm bài trước để tìm hiểu các dạng operator trong C/C++. Chia sẻNhận xét
Đăng nhận xét
Bài đăng phổ biến
Typeorm là gì? Hướng Dẫn Cài Đặt và sử dụng Typeorm cơ bản
Chia sẻ
Tìm hiểu về toán tử (operator) trong C / C++
Chia sẻHướng Dẫn Cách Làm Prototype Trong Figma
Chia sẻLưu trữ
- tháng 10 20222
- tháng 9 20221
- tháng 5 20221
- tháng 12 20211
- tháng 11 20215
- tháng 10 20212
- tháng 6 20211
- tháng 5 20211
- tháng 4 20213
- tháng 3 20215
- tháng 2 20211
- tháng 8 20201
- tháng 4 20201
- tháng 2 20203
- tháng 12 20191
- tháng 10 20191
- tháng 9 201918
Nhãn
- 3d1
- Ai1
- angular2
- API1
- app design1
- application1
- Application server1
- Arithmetic Operators1
- array1
- Assignment Operator1
- authencation1
- automation1
- big o1
- bitwise operator1
- bot1
- c4
- c++4
- CAD1
- chrome1
- class1
- CLI2
- Command Lines1
- compress video1
- console1
- công nghệ45
- css3
- data2
- database2
- Database Management System2
- deno1
- design3
- dms1
- email1
- email marketing1
- en1
- express2
- express generator2
- express.js1
- Feather.js1
- figma1
- gatsby1
- Genetic Algorithm1
- grunt1
- hàm1
- hàm bậc cao1
- hmr1
- Hot Module Replacement1
- internet1
- island1
- javascript8
- Linux1
- loop1
- ly son1
- machine learning2
- marketing2
- middleware1
- mobile1
- monorepo1
- nén video1
- nest2
- nest.js2
- next.js1
- nextjs1
- node1
- Node.js2
- nosql1
- npm1
- nx1
- openvpn1
- operant1
- operator5
- orm1
- package manager1
- photo edit1
- photoshop1
- PostCSS1
- preprocessor1
- prototype1
- react1
- responsive image1
- RESTful1
- ruby1
- schematic1
- sea1
- security1
- server1
- spread operator1
- sql2
- startup1
- state1
- string1
- styled component1
- swift1
- table1
- tailwind1
- tech43
- thiết kế1
- thiết kế CAD1
- thuật toán di truyền1
- toán hạng1
- toán tử3
- traveling1
- typeorm1
- typescript4
- Ubuntu1
- utility1
- vi47
- video2
- video compressor1
- video editor1
- vietnam1
- vòng lặp1
- vpn1
- vue1
- vuejs1
- vuex1
- vultr1
- web 3.01
- web design2
- Web development6
- web31
- webpack1
- Windows1
- Windows Subsystem1
- Windows Terminal1
- yarn1
Báo cáo vi phạm
Từ khóa » Toán Tử Bitwise Trong C
-
Tự Học C/C++ | Toán Tử Bitwise »
-
Các Toán Tử Bitwise - Openplanning
-
Toán Tử Bitwise - Viblo
-
Toán Tử Quan Hệ, Logic, Bitwise, Misc Và độ ưu Tiên Toán Tử Trong C++
-
Phép Toán Thao Tác Bit – Wikipedia Tiếng Việt
-
[C Basic] 04 - Toán Tử Bitwise Trong C - YouTube
-
C++ Bài 8: Toán Tử Logic Và Toán Tử Bitwise Trong C++ [HD]
-
Toán Tử Bitwise Trong Lập Trình C
-
Toán Tử Bitwise Trong C ++
-
Toán Tử Bitwise Là Gì - Bitwise Operators Trong C/C++ Là Gì
-
Phép Toán Thao Tác Bit Trong C++ (Bitwise Operation)
-
Các Thao Tác Trên Bit — Modern C++ - STDIO
-
Các Toán Tử Bitwise Là Gì - Bitwise Operators Trong C/C++ Là Gì
-
Các Toán Tử Bitwise Trong Java
-
Toán Tử Bitwise - Trang Chủ - .vn
-
Sự Khác Biệt Giữa Các Nhà Khai Thác Bitwise Và Logic - Sawakinome
-
Phép Toán Thao Tác Bit (bitwise Operation) Và ứng Dụng Trong Lập ...
-
Toán Tử Thao Tác Bit Trong JavaScript
