Bits, binary, and bitwise operators · Биты, двоичная система и побитовые операторы
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.
Числа — это биты
- Внутри компьютера каждый
intпредставляет собой ряд битов — каждый бит равен0или1. - Обычно мы читаем числа в системе счисления с основанием 10, но машина хранит их в основании 2 (двоичной).
- побитовые операторы позволяют просматривать и изменять отдельные биты.
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.
Разрядные веса и степени двойки
- В двоичной системе каждая позиция — это степень двойки: 1, 2, 4, 8, 16, ...
- Байт
00010100равен16 + 4 = 20. Правый бит занимает разряд 1. - 8-битный байт может хранить значения от
0до255.
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.
Чтение бита с помощью >> и & 1
- Сдвиг
n >> iперемещает биты вправо наiпозиций, поэтому битiпопадает в разряд 1. - Маска
& 1оставляет только этот младший бит, давая результат0или1. - Таким образом, выражение
(n >> i) & 1читает значение бита под номером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.
Побитовые операторы
&(AND),|(OR),^(XOR),~(NOT) объединяют числа побитово.<<и>>сдвигают биты влево или вправо. Сдвиг влево на 1 удваивает число.- Это инструменты для масок, флагов и низкоуровневых трюков.
#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.
Распространенные ошибки
&— это побитовое AND, а&&— логическое AND; не путайте их.<< 1удваивает значение;>> 1делит его пополам.
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.
Теперь попробуйте сами
- Используйте
(n >> i) & 1для чтения битаi, а цикл — для проверки каждого бита. - Для
count_bitsиget_bitпараметр равенunsigned int. Не пишитеmainдля этих случаев.
Bitwise operators · Побитовые операторы
& | ^ ~ << >> work on each bit of a byte independently. · & | ^ ~ << >> работают с каждым битом байта независимо.
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. · Заполните int count_bits(unsigned int n) так, чтобы он возвращал количество битов в n, которые равны 1. Используйте & 1 и >> в цикле. Не пишите не main.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
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. · Завершите блок int get_bit(unsigned int n, int i) так, чтобы он возвращал бит под номером ⟨i⟩ из значения ⟨n⟩ (0 или ⟨1⟩). Используйте оператор ⟨(n >> i) & 1⟩. Не пишите код для main.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
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. · Дан байт n. В main выведите его 8-битную двоичную форму (от старшего бита к младшему), затем переход на новую строку. Для 20, равного 00010100.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.