Bits, binary, and bitwise operators · Bits, nhị phân và toán tử bit
Numbers are bits
- Inside the computer, every
intis a row of bits — each bit is a0or a1. - We usually read numbers in base 10, but the machine stores them in base 2 (binary).
- Bitwise operators let you look at and change individual bits.
Số là bit
- Bên trong máy tính, mỗi
intlà một hàng bits — mỗi bit là một0hoặc một1. - Chúng ta thường đọc số ở cơ số 10, nhưng máy lưu chúng ở cơ số 2 ( nhị phân).
- Toán tử bit cho phép bạn xem và thay đổi từng bit riêng lẻ.
Place value and powers of two
- In binary, each position is a power of two: 1, 2, 4, 8, 16, ...
- The byte
00010100is16 + 4 = 20. The rightmost bit is the 1s place. - An 8-bit byte can hold
0to255.
Giá trị vị trí và lũy thừa của hai
- Trong nhị phân, mỗi vị trí là một lũy thừa của hai: 1, 2, 4, 8, 16, ...
- Byte
00010100là16 + 4 = 20. Bit phải cùng là vị trí 1s. - Một byte 8-bit có thể chứa từ
0đến255.
Reading a bit with >> and & 1
- The shift
n >> imoves the bits right byiplaces, so bitilands in the 1s place. - The mask
& 1keeps only that lowest bit, giving0or1. - So
(n >> i) & 1reads the value of bit numberi.
Đọc một bit với >> và & 1
- Phép dịch
n >> idi chuyển các bit sang phảiivị trí, vì vậy bitirơi vào vị trí 1s. - Mặt nạ
& 1giữ lại chỉ bit thấp nhất đó, cho ra0hoặc1. - Vì vậy
(n >> i) & 1đọc giá trị của bit thứi.
The bitwise operators
&(and),|(or),^(xor),~(not) combine numbers bit by bit.<<and>>shift bits left or right. Shifting left by 1 doubles a number.- These are the tools for masks, flags, and low-level tricks.
Các toán tử bit
&(and),|(or),^(xor),~(not) kết hợp các số bit theo bit.<<và>>dịch bit sang trái hoặc sang phải. Dịch sang trái 1 lần làm gấp đôi một số.- Đây là những công cụ cho mặt nạ, cờ và các mẹo cấp độ thấp.
#include <stdio.h>
int main(void) {
int n = 20;
for (int i = 7; i >= 0; i--) { // from the highest bit down
printf("%d", (n >> i) & 1);
}
printf("\n"); // 00010100
return 0;
}
Common mistakes
&is bitwise AND and&&is logical AND — do not confuse them.<< 1doubles a value;>> 1halves it.
Lỗi thường gặp
&là AND bit và&&là AND logic — đừng nhầm lẫn.<< 1nhân đôi giá trị;>> 1chia đôi nó.
Now you try
- Use
(n >> i) & 1to read biti, and a loop to look at every bit. - For
count_bitsandget_bit, the parameter isunsigned int. Do not write amainfor those.
Bây giờ bạn thử
- Sử dụng
(n >> i) & 1để đọc biti, và vòng lặp để xem xét mọi bit. - Đối với
count_bitsvàget_bit, tham số làunsigned int. Đừng viết mộtmaincho những cái này.
Bitwise operators · Toán tử bit
& | ^ ~ << >> work on each bit of a byte independently. · & | ^ ~ << >> hoạt động độc lập trên từng bit của một byte.
Complete int count_bits(unsigned int n) so it returns how many bits of n are 1. Use & 1 and >> in a loop. Do not write a main. · Hoàn thành int count_bits(unsigned int n) để trả về số lượng bit trong n có giá trị 1. Sử dụng & 1 và >> trong vòng lặp. Không viết một main.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
Complete int get_bit(unsigned int n, int i) so it returns bit number i of n (0 or 1). Use (n >> i) & 1. Do not write a main. · Hoàn thành int get_bit(unsigned int n, int i) để trả về bit thứ i của n (0 hoặc 1). Sử dụng (n >> i) & 1. Không viết một main.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
The byte n is given. In main, print its 8-bit binary form (most significant bit first), then a newline. For 20 that is 00010100. · Byte n đã được cho. Trong main, in dạng nhị phân 8-bit của nó (bit quan trọng nhất ra trước), sau đó là dấu xuống dòng. Đối với 20 có giá trị 00010100.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.