text:
TRUNG TÂM BẢO HÀNH ĐIỆN MÁY
VP: Tầng 4 Tòa nhà 32 Võ Văn Dũng – Đống Đa – Hà Nội
Xưởng dịch vụ: 133 Thái Hà - Đông Đa - Hà Nội
Hotline: 04.3995.8998 - 0936.171.999********************************************************************************
Sign in|Report Abuse|Print Page|Remove Access|Powered By Google Sites

markdown:
------------------------------------------------------------------------
-------------------------------------------
{ Báo giá trước khi sửa chữa }
*VỚI ĐỘI NGŨ KỸ THUẬT VIÊN GIỎI, MÁY MÓC THIẾT BỊ TIÊN TIẾN ,LINH KIỆN CHÍNH HÃNG,
BÁCH KHOA HIỆN LÀ TRUNG TÂM BẢO HÀNH,SỬA CHỮA TIVI LCD
PANASONIC ĐẦU TIÊN VÀ UY TÍN
NHẤT TẠI HÀ NỘI VÀ CÁC TỈNH PHÍA BẮC * QUÝ KHÁCH HÀNG ĐANG SỬ
DỤNG SẢN PHẨM TIVI LCD MANG THƯƠNG HIỆU PANASONIC BỊ HỎNG HÓC XIN HÃY NHẤC MÁY VUI LÒNG
LIÊN HỆ VỚI CHÚNG TÔI ĐỂ ĐƯỢC PHỤC VỤ TỐT NHÂT..!
------------------------------------------------------------------------------------
- Trung tâm bảo hành tivi Sony tại Hà Nội
-
Trung tâm bảo hành tivi Samsung tại Hà Nội - Trung tâm bảo hành tivi Toshiba tại Hà Nội - Trung tâm bảo hành tivi LG tại Hà Nội
- Trung tâm bảo hành tivi Panasonic tại Hà Nội
- Trung tâm bảo hành tivi Sharp tại Hà Nội - Trung tâm bảo hành tivi Philip tại Hà Nội

X-Robots-Tag: noarchive

Cache-Control: public, max-age=5


text:
Phép toán thao tác bit
Trong ngôn ngữ máy tính, các phép toán thao tác bit (tiếng Anh: bitwise operation) thực hiện tính toán (theo từng bit) trên một hoặc hai chuỗi bit, hoặc trên các số nhị phân. Với nhiều loại máy tính, việc thực thi các phép toán thao tác bit thường nhanh hơn so với khi thực thi các phép toán cộng, trừ, nhân, hoặc chia.
Mục lục
Các toán tử thao tác bit[sửa | sửa mã nguồn]
Các toán tử thao tác bit (tiếng Anh: bitwise operator) là các toán tử được sử dụng chung với một hoặc hai số nhị phân để tạo ra một phép toán thao tác bit. Hầu hết các toán tử thao tác bit đều là các toán tử một hoặc hai ngôi.
AND[sửa | sửa mã nguồn]
(khác với and logic &&)
-Ký hiệu: &
-Phép toán này cần hai toán hạng có kiểu giống nhau. Các toán hạng ở dạng số nguyên (thập phân) sẽ được chuyển về dạng nhị phân rồi sau đó thực hiện thao tác and từng bit với bit.
VD: Tính 5 & 3
5--> 0101
3--> 0011
&
= 0001 --> 1
-Phép toán & thường được dùng để kiểm tra 1 bit cụ thể nào đó có giá trị là bao nhiêu.
Ví dụ để kiểm tra bit thứ nhất của biến n có giá trị bao nhiêu ta dùng phép toán n&1 (bit thứ nhất là 1 -> n là số lẻ, bit thứ nhất là 0 -> n là số chẵn
NOT[sửa | sửa mã nguồn]
Toán tử thao tác bit NOT còn được gọi là toán tử lấy phần bù (complement) là một toán tử một ngôi có nhiệm vụ phủ định luận lí từng bit của toán hạng của nó - tức đảo 0 thành 1 và ngược lại. Ví dụ, thực hiện phép toán NOT với số nhị phân 0111:
NOT 0111 --------- = 1000
Bảng chân trị cho NOT:
Trong các ngôn ngữ lập trình C, C++, Java, C#, toán tử thao tác bit NOT được biểu diễn bằng kí hiệu "~" (dấu ngã). Trong Pascal, toán tử này là "
not". Ví dụ:
x = ~y; // C
Hay
x:= not y; { Pascal }
Câu lệnh trên sẽ gán cho x giá trị "NOT y" - tức phần bù của y. Chú ý rằng, toán tử này không tương đương với toán tử luận lí "not" (biểu diễn bằng dấu chấm than "
!" trong C/C++). Về vấn đề này, xin xem ở bài toán tử hoặc các bài về ngôn ngữ C/C++.
Toán tử NOT hữu dụng khi ta cần tìm bù 1 của một số nhị phân. Nó cũng có thể được sử dụng làm bước đầu tiên để tìm số bù 2.
OR[sửa | sửa mã nguồn]
Toán tử thao tác bit OR là một toán tử hai ngôi, có nhiệm vụ thực hiện tính toán (trên từng bit) với hai chuỗi bit có cùng độ dài để tạo ra một chuỗi bit mới có cùng độ dài với hai chuỗi bit ban đầu. Trên mỗi cặp bit tương ứng nhau của hai toán hạng, toán tử OR sẽ trả về 1 nếu có một trong hai bit là 1, còn trong tất cả các trường hợp khác, OR sẽ tạo ra một bit 0. Ví dụ, thực hiện phép toán OR với hai số nhị phân 0101 và 0011:
0101 OR 0011 -------- = 0111
Bảng chân trị cho OR:
Trong C, C++, Java, C#, toán tử thao tác bit OR được biểu diễn bằng kí hiệu "
|" (vạch đứng). Trong Pascal, toán tử này là "
or". Ví dụ:
x = y | z; // C
Hay:
x:= y or z; { Pascal }
Câu lệnh trên sẽ gán cho x kết quả của "y OR z". Chú ý rằng toán tử này không tương đương với toán tử luận lí "or" (biểu diễn bằng cặp vạch đứng "||" trong C/C++). Về vấn đề này, xin xem ở bài toán tử hoặc các bài về ngôn ngữ C/C++.
Ứng dụng điển hình của toán tử thao tác bit OR là dùng để bật (set) một bit cụ thể trong một mẫu bit cho trước. Ví dụ: giả sử ta có mẩu bit 0010. Ta thấy, bit thứ nhất, thứ hai và thứ tư của mẩu chưa được bật (0), bây giờ, nếu ta muốn bật bit đầu tiên của mẩu, ta có thể sử dụng toán tử OR như minh họa sau:
0010 OR 1000 -------- 1010
Khi làm việc với các máy không có nhiều không gian bộ nhớ trống, các lập trình viên thường áp dụng kĩ thuật trên. Lúc đó, thay vì khai báo tám biến kiểu
bool (C++) độc lập, người ta sử dụng từng bit riêng lẽ của một byte để biểu diễn giá trị cho tám biến đó.
XOR[sửa | sửa mã nguồn]
Cũng giống OR, toán tử thao tác bit XOR (còn gọi là OR có loại trừ - exclusive OR) cũng là một toán tử hai ngôi, có nhiệm vụ thực hiện tính toán (trên từng bit) với hai chuỗi bit có cùng độ dài để tạo ra một chuỗi bit mới có cùng độ dài với hai chuỗi bit ban đầu. Tuy nhiên, trên mỗi cặp bit tương ứng nhau của hai toán hạng, toán tử XOR sẽ trả về 1 nếu chỉ có một trong hai bit là 1 (và bit còn lại là 0), ngược lại, XOR trả về bit 0. Ví dụ:
0101 XOR 0011 --------- 0110
(cách nhớ dễ nhất là: 2 bit giống nhau trả về 0, 2 bit khác nhau trả về 1)
Bảng chân trị cho XOR:
Trong C, C++, Java, C#, toán tử thao tác bit XOR được biểu diễn bằng kí hiệu "
^" (dấu mũ). Trong Pascal, toán tử này là "
xor". Ví dụ:
x = y ^ z; // C
Hay:
x:= y xor z; { Pascal }
Câu lệnh trên sẽ gáp trình viên hợp ngữ (Assembly) thường sử dụng toán tử XOR để gán giá trị của một thanh ghi (register) về 0. Khi thực hiện phép toán XOR cho một mẫu bit với chính bản thân nó, mẫu nhị phân nhận được sẽ toàn bit 0. Trên nhiều kiến trúc máy tính, sử dụng XOR để gán 0 cho một thanh ghi sẽ được CPU xử lí nhanh hơn so với chuỗi thao tác tương ứng để nạp và lưu giá trị 0 vào thanh ghi.
Dịch chuyển và quay bit[sửa | sửa mã nguồn]
Phép dịch bit được ký hiệu: >> (dịch phải) hoặc << (dịch trái)(trong c++) shl(dịch trái); shr(dịch phải) Ví dụ: 5 >> 1 = 2(5 shr 1); 2 >> 1 = 1(2 shr 1); 1 >> 1 = 0;
Giải thích: 5b = 0101 sau khi dịch 1 trở thành 0010 (=2d) và cứ tiếp tục như vậy.
Dịch chuyển số học[sửa | sửa mã nguồn]
Dịch chuyển luận lí[sửa | sửa mã nguồn]
Quay không nhớ[sửa | sửa mã nguồn]
Quay có nhớ[sửa | sửa mã nguồn]
Quay có nhớ là phép quay sử dụng thêm một bit để nhớ giá trị bit cao nhất (dịch phải)hoặc bit thấp nhất (dịch trái).Giá trị bit này sẽ được đưa trở lại bit thấp nhất (dịch phải) và bit cao nhất (dịch trái) Ví dụ: Số 7f=0111 1111 khi dịch phải sẽ thành 1111 1110 (fe), dịch trái sẽ thành 1011 1111 (bf)

markdown:
# Phép toán thao tác bit
Trong
[ngôn ngữ máy tính](/wiki/Ng%C3%B4n_ng%E1%BB%AF_m%C3%A1y), các **phép toán thao tác bit** (tiếng Anh: *bitwise operation*) thực hiện tính toán (theo từng [bit](/wiki/Bit)) trên một hoặc hai chuỗi bit, hoặc trên các số [nhị phân](/wiki/H%E1%BB%87_nh%E1%BB%8B_ph%C3%A2n). Với nhiều loại [máy tính](/wiki/M%C3%A1y_t%C3%ADnh), việc thực thi các phép toán thao tác bit thường nhanh hơn so với khi thực thi các phép toán cộng, trừ, nhân, hoặc chia.
## Mục lục
## Các toán tử thao tác bit[
[sửa](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&veaction=edit§ion=1) | [sửa mã nguồn](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&action=edit§ion=1)]
Các
**toán tử thao tác bit** (tiếng Anh: *bitwise operator*) là các toán tử được sử dụng chung với một hoặc hai số nhị phân để tạo ra một phép toán thao tác bit. Hầu hết các toán tử thao tác bit đều là các toán tử một hoặc hai ngôi.
### AND[
[sửa](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&veaction=edit§ion=2) | [sửa mã nguồn](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&action=edit§ion=2)]
(khác với and logic &&)
-Ký hiệu: &
-Phép toán này cần hai toán hạng có kiểu giống nhau. Các toán hạng ở dạng số nguyên (thập phân) sẽ được chuyển về dạng nhị phân rồi sau đó thực hiện thao tác and từng bit với bit.
|A||B||A&B|
|0||0||0|
|0||1||0|
|1||0||0|
|1||1||1|
VD: Tính 5 & 3
5--> 0101
3--> 0011
&
= 0001 --> 1
-Phép toán & thường được dùng để kiểm tra 1 bit cụ thể nào đó có giá trị là bao nhiêu.
Ví dụ để kiểm tra bit thứ nhất của biến n có giá trị bao nhiêu ta dùng phép toán n&1 (bit thứ nhất là 1 -> n là số lẻ, bit thứ nhất là 0 -> n là số chẵn
### NOT[
[sửa](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&veaction=edit§ion=3) | [sửa mã nguồn](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&action=edit§ion=3)]
Toán tử thao tác bit
**NOT** còn được gọi là toán tử lấy **phần bù** ( *complement*) là một [toán tử một ngôi](/wiki/To%C3%A1n_t%E1%BB%AD) có nhiệm vụ phủ định luận lí từng bit của [toán hạng](/w/index.php?title=To%C3%A1n_h%E1%BA%A1ng&action=edit&redlink=1) của nó - tức đảo 0 thành 1 và ngược lại. Ví dụ, thực hiện phép toán NOT với số nhị phân 0111:
NOT 0111 --------- = 1000
Bảng chân trị cho
**NOT**:
|A||NOT A|
|0||1|
|1||0|
Trong các ngôn ngữ lập trình
[C](/wiki/C), [C++](/wiki/C%2B%2B), [Java](/wiki/Java_(c%C3%B4ng_ngh%E1%BB%87)), [C#](/wiki/C#.28Ng.C3.B4n_ng.E1.BB.AF_l.E1.BA.ADp_tr.C3.ACnh.29), toán tử thao tác bit NOT được biểu diễn bằng kí hiệu "~" (dấu ngã). Trong [Pascal](/w/index.php?title=Pascal_(Ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1), toán tử này là "
not". Ví dụ:
x = ~y; // C
Hay
x:= not y; { Pascal }
Câu lệnh trên sẽ gán cho x giá trị "NOT y" - tức phần bù của y. Chú ý rằng, toán tử này không tương đương với toán tử luận lí "not" (biểu diễn bằng dấu chấm than "
!" trong C/C++). Về vấn đề này, xin xem ở bài
[toán tử](/wiki/To%C3%A1n_t%E1%BB%AD) hoặc các bài về ngôn ngữ [C](/wiki/C)/ [C++](/wiki/C%2B%2B).
Toán tử NOT hữu dụng khi ta cần tìm
[bù 1](/wiki/B%C3%B9_1) của một số nhị phân. Nó cũng có thể được sử dụng làm bước đầu tiên để tìm số [bù 2](/wiki/B%C3%B9_2).
### OR[
[sửa](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&veaction=edit§ion=4) | [sửa mã nguồn](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&action=edit§ion=4)]
Toán tử thao tác bit
**OR** là một [toán tử hai ngôi](/wiki/Ph%C3%A9p_to%C3%A1n_hai_ng%C3%B4i), có nhiệm vụ thực hiện tính toán (trên từng bit) với hai chuỗi bit có cùng độ dài để tạo ra một chuỗi bit mới có cùng độ dài với hai chuỗi bit ban đầu. Trên mỗi cặp bit tương ứng nhau của hai toán hạng, toán tử OR sẽ trả về 1 nếu có một trong hai bit là 1, còn trong tất cả các trường hợp khác, OR sẽ tạo ra một bit 0. Ví dụ, thực hiện phép toán OR với hai số nhị phân 0101 và 0011:
0101 OR 0011 -------- = 0111
Bảng chân trị cho
**OR**:
|A||B||A OR B|
|0||0||0|
|0||1||1|
|1||0||1|
|1||1||1|
Trong
[C](/wiki/C), [C++](/wiki/C%2B%2B), [Java](/wiki/Java_(c%C3%B4ng_ngh%E1%BB%87)), [C#](/wiki/C#.28Ng.C3.B4n_ng.E1.BB.AF_l.E1.BA.ADp_tr.C3.ACnh.29), toán tử thao tác bit OR được biểu diễn bằng kí hiệu "
|" (vạch đứng). Trong
[Pascal](/w/index.php?title=Pascal_(Ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1), toán tử này là "
or". Ví dụ:
x = y | z; // C
Hay:
x:= y or z; { Pascal }
Câu lệnh trên sẽ gán cho x kết quả của "y OR z". Chú ý rằng toán tử này không tương đương với toán tử luận lí "or" (biểu diễn bằng cặp vạch đứng "||" trong C/C++). Về vấn đề này, xin xem ở bài
[toán tử](/wiki/To%C3%A1n_t%E1%BB%AD) hoặc các bài về ngôn ngữ [C](/wiki/C)/ [C++](/wiki/C%2B%2B).
Ứng dụng điển hình của toán tử thao tác bit OR là dùng để bật (
*set*) một bit cụ thể trong một mẫu bit cho trước. Ví dụ: giả sử ta có mẩu bit 0010. Ta thấy, bit thứ nhất, thứ hai và thứ tư của mẩu chưa được bật (0), bây giờ, nếu ta muốn bật bit đầu tiên của mẩu, ta có thể sử dụng toán tử OR như minh họa sau:
0010 OR 1000 -------- 1010
Khi làm việc với các máy không có nhiều không gian bộ nhớ trống, các lập trình viên thường áp dụng kĩ thuật trên. Lúc đó, thay vì khai báo tám biến kiểu
bool (C++) độc lập, người ta sử dụng từng bit riêng lẽ của một byte để biểu diễn giá trị cho tám biến đó.
### XOR[
[sửa](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&veaction=edit§ion=5) | [sửa mã nguồn](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&action=edit§ion=5)]
Cũng giống OR, toán tử thao tác bit
**XOR** (còn gọi là **OR có loại trừ** - *exclusive OR*) cũng là một toán tử hai ngôi, có nhiệm vụ thực hiện tính toán (trên từng bit) với hai chuỗi bit có cùng độ dài để tạo ra một chuỗi bit mới có cùng độ dài với hai chuỗi bit ban đầu. Tuy nhiên, trên mỗi cặp bit tương ứng nhau của hai toán hạng, toán tử XOR sẽ trả về 1 nếu chỉ có một trong hai bit là 1 (và bit còn lại là 0), ngược lại, XOR trả về bit 0. Ví dụ:
0101 XOR 0011 --------- 0110
(cách nhớ dễ nhất là: 2 bit giống nhau trả về 0, 2 bit khác nhau trả về 1)
Bảng chân trị cho
**XOR**:
|A||B||A XOR B|
|0||0||0|
|0||1||1|
|1||0||1|
|1||1||0|
Trong
[C](/wiki/C), [C++](/wiki/C%2B%2B), [Java](/wiki/Java_(c%C3%B4ng_ngh%E1%BB%87)), [C#](/wiki/C#.28Ng.C3.B4n_ng.E1.BB.AF_l.E1.BA.ADp_tr.C3.ACnh.29), toán tử thao tác bit XOR được biểu diễn bằng kí hiệu "
^" (dấu mũ). Trong
[Pascal](/w/index.php?title=Pascal_(Ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1), toán tử này là "
xor". Ví dụ:
x = y ^ z; // C
Hay:
x:= y xor z; { Pascal }
Câu lệnh trên sẽ gáp trình viên
[hợp ngữ](/wiki/H%E1%BB%A3p_ng%E1%BB%AF) (Assembly) thường sử dụng toán tử XOR để gán giá trị của một [thanh ghi](/wiki/Thanh_ghi) (register) về 0. Khi thực hiện phép toán XOR cho một mẫu bit với chính bản thân nó, mẫu nhị phân nhận được sẽ toàn bit 0. Trên nhiều kiến trúc máy tính, sử dụng XOR để gán 0 cho một thanh ghi sẽ được CPU xử lí nhanh hơn so với chuỗi thao tác tương ứng để nạp và lưu giá trị 0 vào thanh ghi.
## Dịch chuyển và quay bit[
[sửa](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&veaction=edit§ion=6) | [sửa mã nguồn](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&action=edit§ion=6)]
Phép dịch bit được ký hiệu: >> (dịch phải) hoặc << (dịch trái)(trong c++) shl(dịch trái); shr(dịch phải) Ví dụ: 5 >> 1 = 2(5 shr 1); 2 >> 1 = 1(2 shr 1); 1 >> 1 = 0;
Giải thích: 5b = 0101 sau khi dịch 1 trở thành 0010 (=2d) và cứ tiếp tục như vậy.
### Dịch chuyển số học[
[sửa](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&veaction=edit§ion=7) | [sửa mã nguồn](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&action=edit§ion=7)]
### Dịch chuyển luận lí[
[sửa](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&veaction=edit§ion=8) | [sửa mã nguồn](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&action=edit§ion=8)]
### Quay không nhớ[
[sửa](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&veaction=edit§ion=9) | [sửa mã nguồn](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&action=edit§ion=9)]
### Quay có nhớ[
[sửa](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&veaction=edit§ion=10) | [sửa mã nguồn](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit&action=edit§ion=10)]
Quay có nhớ là phép quay sử dụng thêm một bit để nhớ giá trị bit cao nhất (dịch phải)hoặc bit thấp nhất (dịch trái).Giá trị bit này sẽ được đưa trở lại bit thấp nhất (dịch phải) và bit cao nhất (dịch trái) Ví dụ: Số 7f=0111 1111 khi dịch phải sẽ thành 1111 1110 (fe), dịch trái sẽ thành 1011 1111 (bf)

WARC-Type: response

Content-Type: application/http; msgtype=response

Content-Type: text/html; charset=UTF-8

Connection: close

X-Content-Type-Options: nosniff

Content-language: vi

Vary: Accept-Encoding,Cookie

Content-Encoding: gzip

Via: 1.1 varnish, 1.1 varnish

Accept-Ranges: bytes

X-Cache: cp1053 miss (0), cp1052 frontend miss (0)

Cache-Control: private, s-maxage=0, max-age=0, must-revalidate