رفتن به محتوا
مبانی کامپیوتر و اینترنتکامپیوتر از دروندرس ۳ از ۱۶

بیت، بایت و اعداد باینری

کامپیوتر همه‌چیز را با صفر و یک نگه می‌دارد: بیت و بایت، شمارش در مبنای ۲ و ۱۶، تبدیل عدد بین مبناها با پایتون و bash، دیدن بایت‌های واقعی یک متن با xxd، فرق KB با KiB و چرا دیسک ۱ ترابایتی ۹۳۱ گیگ نشان داده می‌شود، و فرق Mbps با MB/s.

  • حدود ۲۲ دقیقه مطالعه
  • ۷ مثال اجراشده
  • ۳ تمرین با جواب
  • مقدماتی (از صفر مطلق)
  • به‌روزرسانی: ۲۶ مهر ۱۴۰۵

توی این درس یاد می‌گیری کامپیوتر چطور با چیزی به ساده‌گی صفر و یک عکس، آهنگ و متن فارسی را نگه می‌دارد. بیت (bit) و بایت (byte) را می‌شناسی، شمارش در مبنای ۲ (باینری) و مبنای ۱۶ (هگز) را با دست و با کد انجام می‌دهی، بایت‌های واقعی یک متن را می‌بینی، و جواب این معما را می‌گیری که چرا دیسک «۱ ترابایتی» که خریدی، در کامپیوتر «۹۳۱ گیگ» نشان داده می‌شود.

مسئله: کامپیوتر فقط کلید روشن و خاموش دارد

Section titled “مسئله: کامپیوتر فقط کلید روشن و خاموش دارد”

داخل کامپیوتر میلیاردها کلید ریز الکتریکی هست که هر کدام فقط دو حالت دارند: روشن یا خاموش (جریان هست یا نیست). هیچ جای کامپیوتر «حرف الف» یا «رنگ آبی» یا «آهنگ» وجود ندارد. پس چطور عکس و فیلم و متن را نگه می‌دارد؟ جواب: همه‌چیز را به عدد تبدیل می‌کند، و عدد را با همان کلیدهای روشن و خاموش می‌نویسد.

یک ردیف کلید برق را تصور کن که هر کدام فقط خاموش (۰) یا روشن (۱) است.

  • با ۱ کلید دو حالت داری: ۰ یا ۱.
  • با ۲ کلید چهار حالت: ۰۰، ۰۱، ۱۰، ۱۱.
  • با ۳ کلید هشت حالت، با ۴ کلید شانزده حالت. هر کلید تازه، تعداد حالت‌ها را دو برابر می‌کند.

حالا قرار می‌گذاریم هر حالت یک معنی داشته باشد: حالت اول یعنی «۰»، دوم «۱»، سوم «۲»… با ۸ کلید ۲۵۶ حالت داری، یعنی می‌توانی از ۰ تا ۲۵۵ را بنویسی. اگر قرار بگذاریم عددی مثل ۶۵ یعنی حرف «A»، حالا یک ردیف کلید می‌تواند یک حرف را نگه دارد. همین کار را برای رنگ، صدا و هر چیز دیگر می‌کنند.

  • بیت (bit) کوچک‌ترین واحد: یک کلید، یک رقم صفر یا یک.
  • بایت (byte) = ۸ بیت. یک بایت ۲۵۶ حالت دارد (۰ تا ۲۵۵). تقریباً اندازه‌ی «یک حرف انگلیسی».
  • بقیه واحدها از بایت می‌آیند.
هر واحد از واحد قبلی بزرگ‌تر است. در حساب کامپیوتر ضریب ۱۰۲۴ است (چون ۲ به توان ۱۰)، در حساب فروشنده‌ها ضریب ۱۰۰۰.

ما در زندگی در مبنای ۱۰ می‌شماریم: ده رقم (۰ تا ۹)، و هر رقم جایگاهی دارد: در ۲۰۲۶، رقم ۲ سمت چپ یعنی «دو هزارتا»، رقم بعدی «بیست‌تا» و… چون هر جایگاه ۱۰ برابر قبلی است.

در مبنای ۲ (باینری) فقط دو رقم داریم (۰ و ۱) و هر جایگاه ۲ برابر قبلی است: ۱، ۲، ۴، ۸، ۱۶، ۳۲، ۶۴، ۱۲۸. عدد باینری 1101 یعنی: یک هشت، یک چهار، صفر دو، یک یک: ۸ + ۴ + ۰ + ۱ = ۱۳.

جایگاه ۱۲۸ ۶۴ ۳۲ ۱۶ ۸ ۴ ۲ ۱
مثال: عدد ۱۳ ۰ ۰ ۰ ۰ ۱ ۱ ۰ ۱
مثال: عدد ۶۵ (حرف A) ۰ ۱ ۰ ۰ ۰ ۰ ۰ ۱

دستورها روی یک کامپیوتر لینوکسی آزمایشی اجرا شده‌اند. اگر پایتون روی سیستمت هست (ویندوز و مک هم می‌توانند)، همان خط‌های python3 -c را اجرا کن.

مثال ۱: شمردن با صفر و یک

Section titled “مثال ۱: شمردن با صفر و یک”

پایتون هر عدد را به باینری تبدیل می‌کند. format(n, "04b") یعنی «عدد را در مبنای ۲ بنویس و با صفر پر کن تا چهار رقم شود»:

Terminal window
python3 -c "
for n in range(0, 9):
print(n, format(n, '04b'))
"
خروجی
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000

ستون اول عدد معمولی است و ستون دوم همان عدد با چهار کلید. به الگو نگاه کن: ستون راست هر بار ۰، ۱، ۰، ۱ می‌شود (مثل کلیدی که مدام عوض می‌شود)؛ ستون بعدی هر دو ردیف یک بار عوض می‌شود. وقتی چهار رقم پر می‌شود (۱۵ = 1111)، برای عدد بعد (۱۶) یک رقم تازه لازم است، درست مثل اینکه در ده‌دهی بعد از ۹۹ سه رقم لازم داری.

عدد ۲۰۲۶ را در مبنای ۲، ۸ و ۱۶ می‌نویسیم. مبنای ۱۶ (هگزادسیمال، hex) شانزده رقم دارد: ۰ تا ۹ و بعد a تا f (یعنی ۱۰ تا ۱۵). برنامه‌نویس‌ها دوستش دارند چون هر رقم هگز دقیقاً ۴ بیت است: یک بایت = دو رقم هگز.

Terminal window
python3 -c "
n = 2026
print('binary :', bin(n))
print('octal :', oct(n))
print('hex :', hex(n))
"
printf '%d in hex is %x\n' 2026 2026
خروجی
binary : 0b11111101010
octal : 0o3752
hex : 0x7ea
2026 in hex is 7ea

۲۰۲۶ در باینری 11111101010 (یازده رقم) است، در هگز 7ea (سه رقم) و در مبنای ۸ 3752. پیشوندها (0b برای باینری، 0o برای مبنای ۸ و 0x برای هگز) فقط به خواننده می‌گویند «این عدد در کدام مبنا نوشته شده». دستور printf در bash هم همین را می‌کند: %d عدد ده‌دهی، %x هگز. هگز سه رقم است در برابر یازده رقم باینری؛ برای همین برنامه‌نویس‌ها هگز را ترجیح می‌دهند.

مثال ۳: برگشت از باینری به ده‌دهی

Section titled “مثال ۳: برگشت از باینری به ده‌دهی”

برعکس هم ممکن است. در پایتون int("متن", مبنا) و در bash عبارت $((مبنا#عدد)):

Terminal window
python3 -c "print(int('11111101010', 2), int('7ea', 16))"
echo $((2#11111101010)) $((16#7ea)) $((2#101))
خروجی
2026 2026
2026 2026 5

هر دو تبدیل ما را به ۲۰۲۶ برگرداند، پس باینری و هگز همان عدد هستند، فقط به شکل دیگری نوشته شده‌اند. در bash، $((2#101)) یعنی «عدد 101 را در مبنای ۲ بخوان» و جواب ۵ است.

مثال ۴: یک بایت چقدر جا دارد؟

Section titled “مثال ۴: یک بایت چقدر جا دارد؟”

یک بایت هشت بیت است. بزرگ‌ترین عددی که در آن جا می‌شود، وقتی همه‌ی هشت بیت یک باشند:

Terminal window
python3 -c "
print('largest value in 8 bits :', int('11111111', 2), '(', format(255, '08b'), ')')
for bits in (8, 16, 32, 64):
print(f'{bits:>2} bits -> {2 ** bits:,} different values')
"
خروجی
largest value in 8 bits : 255 ( 11111111 )
8 bits -> 256 different values
16 bits -> 65,536 different values
32 bits -> 4,294,967,296 different values
64 bits -> 18,446,744,073,709,551,616 different values
  • بزرگ‌ترین عدد در یک بایت ۲۵۵ است (11111111، هشت تا یک).
  • با هر بیت اضافه، تعداد حالت‌ها دو برابر می‌شود: ۸ بیت ۲۵۶ حالت، ۱۶ بیت ۶۵٬۵۳۶، ۳۲ بیت حدود ۴٫۳ میلیارد (تعداد آدرس‌های IPv4 دنیا!)، و ۶۴ بیت عددی با ۲۰ رقم. وقتی می‌شنوی «پردازنده‌ی ۶۴ بیتی»، یعنی پردازنده می‌تواند عددهای ۶۴ بیتی را یک‌جا پردازش کند (در تئوری تا حدود ۱۸ کوینتیلیون آدرس حافظه؛ پردازنده‌های واقعی از همه‌ی بیت‌ها استفاده نمی‌کنند: در مثال درس قبل lscpu برای آدرس فیزیکی «۵۲ بیت» گفت).

مثال ۵: بایت‌های واقعی یک متن

Section titled “مثال ۵: بایت‌های واقعی یک متن”

حالا ببینیم دو حرف Hi در کامپیوتر چطور ذخیره می‌شوند. xxd (hex dump) بایت‌های ورودی را نشان می‌دهد؛ با -b به‌صورت باینری و بدون آن به‌صورت هگز:

Terminal window
printf 'Hi' | xxd -b
printf 'Hi' | xxd
خروجی
00000000: 01001000 01101001 Hi
00000000: 4869 Hi

دو حرف، دو بایت، چهار رقم هگز:

  • حرف H برابر بایت 01001000 (هگز 48، ده‌دهی ۷۲) و حرف i برابر 01101001 (هگز 69، ده‌دهی ۱۰۵) است.
  • این قرارداد که «کدام عدد کدام حرف است» کدگذاری (encoding) نام دارد. اینجا ASCII/UTF-8 است. در درس بعد می‌بینی فارسی چطور کدگذاری می‌شود.
  • ستون کناری (Hi) نمایش متنی بایت‌هاست.

مثال ۶: معمای ۱ ترابایت و ۹۳۱ گیگ

Section titled “مثال ۶: معمای ۱ ترابایت و ۹۳۱ گیگ”

دو سیستم واحد وجود دارد. SI (ده‌دهی): کیلو = ۱۰۰۰، مگا = ۱۰۰۰ کیلو. فروشنده‌ها از این استفاده می‌کنند. IEC (دودویی): کیبی (KiB) = ۱۰۲۴ بایت، مبی (MiB) = ۱۰۲۴ کیبی، گیبی (GiB)، تبی (TiB). سیستم‌عامل‌ها معمولاً این را (با اسم «GB» اشتباهی) نشان می‌دهند. ابزار numfmt تبدیل می‌کند:

Terminal window
echo "SI : 1 MB = $(numfmt --to=none 1000000) bytes -> $(numfmt --to=si 1000000)"
echo "IEC : 1 MiB = $(numfmt --from=iec-i 1Mi) bytes -> $(numfmt --to=iec-i 1048576)"
python3 -c "
tb = 10 ** 12 # '1 TB' on the box
print(f'1 TB (box) = {tb:,} bytes = {tb / 2**30:.1f} GiB (shown as ~931 GB by Windows)')
"
خروجی
SI : 1 MB = 1000000 bytes -> 1.0M
IEC : 1 MiB = 1048576 bytes -> 1.0Mi
1 TB (box) = 1,000,000,000,000 bytes = 931.3 GiB (shown as ~931 GB by Windows)
  • در SI، یک مگابایت ۱٬۰۰۰٬۰۰۰ بایت است (1.0M)؛ در IEC، یک مبی‌بایت (MiB) ۱٬۰۴۸٬۵۷۶ بایت است (1.0Mi). حرف i در آخر یعنی «دودویی».
  • یک «ترابایت» روی جعبه ۱۰¹۲ بایت است. وقتی ویندوز آن را بر ۲³⁰ (یک گیبی‌بایت) تقسیم کند، می‌شود ۹۳۱٫۳ و آن را «۹۳۱ GB» می‌نویسد. ظرفیت دیسک کم نشده؛ واحد عوض شده. (macOS برخلاف ویندوز برای «GB» از ۱۰۰۰ استفاده می‌کند، پس همان دیسک روی مک حدود ۱ ترابایت نشان داده می‌شود.)

مثال ۷: عددهایی که هر روز می‌بینی

Section titled “مثال ۷: عددهایی که هر روز می‌بینی”

دو چیز آشنا که پشت پرده فقط بایت‌اند. رنگ: رنگ #1E90FF سه بایت است (قرمز، سبز، آبی) که در هگز نوشته شده. آدرس IP: 192.168.1.10 چهار بایت است که با نقطه از هم جدا شده‌اند، یعنی یک عدد ۳۲ بیتی:

Terminal window
python3 -c "
import ipaddress
color = '1E90FF'
print('color #' + color, '= red, green, blue =', [int(color[i:i+2], 16) for i in (0, 2, 4)])
ip = ipaddress.ip_address('192.168.1.10')
print('IP 192.168.1.10 as one 32-bit number:', int(ip))
print('as bits:', format(int(ip), '032b'))
"
خروجی
color #1E90FF = red, green, blue = [30, 144, 255]
IP 192.168.1.10 as one 32-bit number: 3232235786
as bits: 11000000101010000000000100001010
  • رنگ #1E90FF: سه بایت 1E، 90، FF، یعنی قرمز ۳۰، سبز ۱۴۴ و آبی ۲۵۵ (بیشتر آبی). هر عدد بین ۰ و ۲۵۵ است، یعنی یک بایت. اینکه ۱۶ میلیون رنگ (۲۵۶ × ۲۵۶ × ۲۵۶) داریم از همین‌جاست.
  • آدرس 192.168.1.10 چهار عدد بین ۰ و ۲۵۵ است، یعنی ۳۲ بیت؛ می‌شود یک عدد به بزرگی ۳٬۲۳۲٬۲۳۵٬۷۸۶. شبکه‌ها در واقع با همین عدد کار می‌کنند و نقطه‌ها فقط برای خواندن راحت آدمی است. در درس «شبکه و آدرس IP» ادامه‌اش می‌دهیم.

پشت پرده: چرا همیشه ۸ بیت و چرا هگز؟

Section titled “پشت پرده: چرا همیشه ۸ بیت و چرا هگز؟”

چرا بایت ۸ بیت است؟ تصمیمی تاریخی است (دهه‌ی ۱۹۶۰)، ولی ۲۵۶ حالت برای نشان دادن یک حرف انگلیسی، رقم و علامت‌ها مناسب بود و ۸ توان ۲ است که با طراحی مدارها جور درمی‌آید. امروز «بایت» یعنی ۸ بیت در همه‌جا.

چرا هگز؟ خواندن 11111101010 برای آدم سخت است و اشتباه‌کردنش آسان. چون ۴ بیت = ۱ رقم هگز، می‌توانی هر چهار بیت را یک‌جا بخوانی: 0111 1110 1010 ← 7 e a ← 7ea. و یک بایت همیشه دقیقاً دو رقم هگز است (48 69 برای Hi). برای همین رنگ‌ها، آدرس MAC و خروجی xxd هگز است.

اعداد منفی چه؟ کامپیوتر علامت منفی ندارد؛ از ترفندی به اسم «مکمل دو» استفاده می‌کند: در ۸ بیت، 11111111 را می‌توان ۲۵۵ خواند یا ۱-، بسته به اینکه برنامه بگوید عدد علامت‌دار است یا بی‌علامت. اگر عددی از ظرفیتش بیشتر شود (۲۵۵ + ۱ در یک بایت) سرریز (overflow) می‌کند و به صفر برمی‌گردد. در درس‌های بعد می‌بینی چرا برنامه‌نویس‌ها به نوع و اندازه‌ی عدد حساس‌اند:

Terminal window
python3 -c "
print('255 + 1 in one byte :', (255 + 1) % 256)
print('-1 as 8 bits (unsigned) :', format(-1 & 0xFF, '08b'), '=', -1 & 0xFF)
"
خروجی
255 + 1 in one byte : 0
-1 as 8 bits (unsigned) : 11111111 = 255

۲۵۵ + ۱ در یک بایت 0 شد (مثل کیلومترشمار)، و -1 در هشت بیت همان 11111111 است که اگر بی‌علامت بخوانی ۲۵۵ می‌شود. نتیجه‌ی عملی: هر عددی که برنامه نگه می‌دارد یک نوع و یک اندازه دارد و اگر از آن بزرگ‌تر شود، خراب می‌شود.

اسم علامت اندازه نوع
بیت b ۱ رقم صفر یا یک —
بایت B ۸ بیت —
کیلوبایت KB ۱٬۰۰۰ بایت SI (فروشنده‌ها)
کیبی‌بایت KiB ۱٬۰۲۴ بایت IEC (سیستم‌عامل)
مگابایت MB ۱٬۰۰۰٬۰۰۰ بایت SI
مبی‌بایت MiB ۱٬۰۴۸٬۵۷۶ بایت IEC
گیگابایت GB ۱۰⁹ بایت SI
گیبی‌بایت GiB ۲³⁰ بایت (حدود ۱٫۰۷۴ برابر GB) IEC
ترابایت TB ۱۰¹² بایت SI
تبی‌بایت TiB ۲⁴⁰ بایت (حدود ۱٫۱ برابر TB) IEC

۱) قاطی کردن بیت و بایت (b و B)

Section titled “۱) قاطی کردن بیت و بایت (b و B)”

اینترنت را با بیت در ثانیه می‌فروشند (Mbps یا Mb/s) ولی فایل را با بایت نشان می‌دهند. اینترنت «۱۰۰ مگابیت» یعنی حداکثر ۱۲٫۵ مگابایت در ثانیه، نه ۱۰۰:

Terminal window
python3 -c "
mbps = 100
print(f'{mbps} Mbps = {mbps / 8} MB/s')
size_mb = 500
print(f'a {size_mb} MB file needs at least {size_mb / (mbps / 8):.0f} seconds')
"
خروجی
100 Mbps = 12.5 MB/s
a 500 MB file needs at least 40 seconds

۱۰۰ مگابیت در ثانیه یعنی ۱۲٫۵ مگابایت در ثانیه؛ پس فایل ۵۰۰ مگابایتی حتی در بهترین حالت حداقل ۴۰ ثانیه طول می‌کشد، نه ۵ ثانیه. راه‌حل: همیشه به حرف کوچک و بزرگ نگاه کن: b کوچک بیت، B بزرگ بایت. برای تبدیل مگابیت به مگابایت تقسیم بر ۸.

عدد 10 چند است؟ بستگی دارد: در مبنای ۱۰ ده، در مبنای ۲ دو، در مبنای ۱۶ شانزده. همیشه مبنا را بنویس (0b10، 0x10):

Terminal window
python3 -c "
print(int('10', 10), int('10', 2), int('10', 16))
"
خروجی
10 2 16

همان نوشته‌ی 10 سه عدد متفاوت شد: ۱۰ و ۲ و ۱۶. راه‌حل: مبنا را صریح بنویس (پیشوند 0b، 0x یا توضیح) و هرگز عدد بدون مبنا را به کسی ندهد.

۳) رقمی که در آن مبنا وجود ندارد

Section titled “۳) رقمی که در آن مبنا وجود ندارد”
Terminal window
python3 -c "print(int('12', 2))" 2>&1 | tail -n 1
echo $((2#12))
خروجی
ValueError: invalid literal for int() with base 2: '12'
bash: 2#12: value too great for base (error token is "2#12")

رقم 2 در مبنای ۲ وجود ندارد (فقط ۰ و ۱). پایتون با ValueError و bash با «value too great for base» همین را می‌گویند. راه‌حل: رقم‌ها باید از مبنا کوچک‌تر باشند: در مبنای ۲ فقط ۰ و ۱، در مبنای ۱۶ تا f.

تمرینآسان

عدد ۲۰۲۶ را به باینری و هگز ببر، و با تبدیل برعکس ثابت کن درست است.

دیدن جواب
Terminal window
python3 -c "
n = 2026
b, h = bin(n)[2:], hex(n)[2:]
print(n, '->', b, '->', int(b, 2))
print(n, '->', h, '->', int(h, 16))
assert int(b, 2) == n and int(h, 16) == n
print('both round trips are correct')
"
خروجی
2026 -> 11111101010 -> 2026
2026 -> 7ea -> 2026
both round trips are correct

در هر دو جهت به ۲۰۲۶ رسیدیم و assert (که اگر شرط غلط باشد برنامه را با خطا قطع می‌کند) ساکت ماند و پیام آخر چاپ شد. bin(n)[2:] یعنی «رشته‌ی باینری را بگیر و دو حرف اول (0b) را دور بریز».

تمرینمتوسط

فایلی ۲ گیگابایتی (به معنی ۲ × ۱۰⁹ بایت) را با اینترنت ۱۰۰ مگابیت در ثانیه حداقل در چند ثانیه (و چند دقیقه) دانلود می‌کنی؟ و اگر اینترنت ۱ گیگابیت باشد؟

دیدن جواب
Terminal window
python3 -c "
size_bits = 2 * 10**9 * 8
for name, bps in (('100 Mbps', 100 * 10**6), ('1 Gbps', 10**9)):
s = size_bits / bps
print(f'{name:>8}: {s:5.0f} s = {s / 60:.1f} min')
"
خروجی
100 Mbps: 160 s = 2.7 min
1 Gbps: 16 s = 0.3 min

۲ گیگابایت = ۲ × ۱۰⁹ بایت = ۱۶ × ۱۰⁹ بیت. با ۱۰۰ مگابیت در ثانیه (۱۰⁸ بیت در ثانیه) می‌شود ۱۶۰ ثانیه، یعنی حدود ۲٫۷ دقیقه؛ با ۱ گیگابیت در ثانیه، ۱۶ ثانیه. نکته: اول همه‌چیز را به بیت برگرداندیم تا واحدها یکی شود. (عدد واقعی کمی بیشتر می‌شود، چون بخشی از پهنای باند صرف هدرهای شبکه می‌شود.)

تمرینسخت

تمرین اصلی درس: برنامه‌ای بنویس که یک عدد بگیرد و جدول «ده‌دهی، باینری، هگز» را چاپ کند؛ و برای همه‌ی عددهای ۰ تا ۱۰۰۰ ثابت کند تبدیل رفت و برگشت هیچ‌وقت خراب نمی‌شود.

دیدن جواب
convert.py
# prints a decimal / binary / hex table and checks round trips for 0..1000
import sys
def row(n):
return f"{n:>6} {n:>12b} {n:>5x}"
numbers = [int(a) for a in sys.argv[1:]] or [13, 65, 255, 2026]
print(f"{'dec':>6} {'bin':>12} {'hex':>5}")
for n in numbers:
print(row(n))
for n in range(1001):
assert int(format(n, "b"), 2) == n
assert int(format(n, "x"), 16) == n
print("all 1001 round trips are correct")
Terminal window
python3 convert.py
python3 convert.py 7 1024
rm -f convert.py
خروجی
dec bin hex
13 1101 d
65 1000001 41
255 11111111 ff
2026 11111101010 7ea
all 1001 round trips are correct
dec bin hex
7 111 7
1024 10000000000 400
all 1001 round trips are correct

اسکریپت دو کار کرد: جدول سه ستونه را چاپ کرد (:>12b یعنی «باینری، راست‌چین، در ۱۲ ستون» و x هگز) و برای هر عدد ۰ تا ۱۰۰۰ دو بار assert زد. بدون آرگومان، چهار عدد پیش‌فرض را نشان داد؛ با آرگومان (7 1024)، همان‌ها را. آخر بلوک فایل را پاک کردیم.

⚡ بررسی سریع

یک بایت چند حالت مختلف می‌تواند داشته باشد؟

آزمونک
  1. عدد باینری 1010 در مبنای ۱۰ چند است؟

  2. اینترنت «۸۰ مگابیت در ثانیه» دارم. حداکثر سرعت دانلود فایل چند مگابایت در ثانیه است؟

  3. چرا دیسک «۱ ترابایتی» که خریده‌ای در ویندوز حدود ۹۳۱ گیگ نشان داده می‌شود؟

  4. رنگ #FF0000 چند بایت است و چه رنگی است؟

  5. در یک بایت (بدون علامت)، اگر به ۲۵۵ یک واحد اضافه کنی چه می‌شود؟

  • کامپیوتر فقط صفر و یک می‌شناسد. بیت یک رقم است، بایت هشت بیت و ۲۵۶ حالت (۰ تا ۲۵۵).
  • در مبنای ۲ هر جایگاه دو برابر قبلی است (۱، ۲، ۴، ۸…)؛ عدد را با جمع جایگاه‌های «یک» می‌خوانی.
  • هگز شانزده رقم دارد (0-9a-f) و هر رقمش ۴ بیت است؛ یک بایت دو رقم هگز.
  • رنگ و آدرس IP هم فقط چند بایت‌اند: #1E90FF سه بایت، 192.168.1.10 چهار بایت.
  • فروشنده‌ها ۱۰۰۰ (KB، MB، GB، TB) می‌شمارند، سیستم‌عامل‌ها ۱۰۲۴ (KiB، MiB، GiB، TiB)؛ برای همین ۱ ترابایت می‌شود حدود ۹۳۱ گیگ.
  • بیت (b) و بایت (B) فرق دارند: اینترنت ۱۰۰ مگابیت یعنی ۱۲٫۵ مگابایت در ثانیه.
برگه‌ی تقلب این درس
دستورکاری که می‌کند
python3 -c "print(bin(13), hex(255))"عدد به باینری و هگز
python3 -c "print(int('1101', 2))"باینری به ده‌دهی
echo $((2#1101))باینری به ده‌دهی در bash
printf '%x\n' 255ده‌دهی به هگز در bash
printf 'Hi' | xxd -bبایت‌های یک متن، باینری
printf 'Hi' | xxdبایت‌های یک متن، هگز
numfmt --to=iec-i 1048576بایت به واحد IEC (۱٫۰Mi)
numfmt --to=si 1000000بایت به واحد SI (۱٫۰M)