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. البت الأيمن يمثل منزلة الـ1s. - بايت بحجم 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في منزلة الـ1s. - القناع
& 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.
مشغلات البت
&(و)،|(أو)،^(xor)،~(ليس) تجمع الأرقام بتًا ببت.<<و>>يزاحان البتات يمينًا أو يسارًا. الإزاحة لليسار بمقدار 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. · اضغط تشغيل لرؤية المخرجات هنا.