Sanoq tizimlari: ikkilik va o‘n oltilik
O‘nlik, ikkilik, o‘n oltilik; bir-biriga o‘tkazish; ranglar kodi
Biz o'nlik sanoq tizimida sanaymiz — 10 ta raqam (0–9), chunki qo'limizda 10 ta barmoq bor. Kompyuter esa ikkilik tizimda ishlaydi — faqat 0 va 1 (tok bor / yo'q).
Xona qiymati
O'nlik 347 = 3·100 + 4·10 + 7·1. Ikkilik 100101 xuddi shunday, faqat xonalar 2 ning darajalari:
| Xona | 2⁵=32 | 2⁴=16 | 2³=8 | 2²=4 | 2¹=2 | 2⁰=1 |
|---|---|---|---|---|---|---|
| Raqam | 1 | 0 | 0 | 1 | 0 | 1 |
32 + 4 + 1 = 37.
print(format(37, "b")) # o'nlikdan ikkilikka
print(format(37, "08b")) # 8 xonali (bayt ko'rinishida)
print(int("100101", 2)) # ikkilikdan o'nlikka
# Natija: 100101
# Natija: 00100101
# Natija: 37
Qo'lda o'tkazish: 2 ga bo'lib borish
Sonni 2 ga bo'lib, qoldiqlarni yozib boramiz, keyin ularni teskari o'qiymiz:
def ikkilikka(n):
if n == 0:
return "0"
raqamlar = ""
while n > 0:
raqamlar = str(n % 2) + raqamlar
n //= 2
return raqamlar
print(ikkilikka(37), ikkilikka(8), ikkilikka(255))
# Natija: 100101 1000 11111111
O'n oltilik (hex)
Ikkilik juda uzun — shuning uchun dasturchilar o'n oltilik tizimdan foydalanadi: 0–9 va A–F (A=10 … F=15). Bitta hex raqam — aynan 4 bit, ikkita — 1 bayt.
print(hex(255))
print(int("ff", 16))
# Natija: 0xff
# Natija: 255
Veb-sahifadagi ranglar aynan hex'da yoziladi: #FF8800 — qizil FF, yashil 88, ko'k 00:
rang = "#FF8800"
qizil, yashil, kok = (int(rang[i:i + 2], 16) for i in (1, 3, 5))
print(qizil, yashil, kok)
# Natija: 255 136 0
Amaliyot Python
onlikka(ikkilik_matn) funksiyasini o'zingiz yozing (int(..., 2) siz): har raqamni xona qiymatiga ko'paytirib qo'shing:
37
255
0
input() uchun ma'lumotlar
Yechimni ko'rish
def onlikka(ikkilik):
natija = 0
for raqam in ikkilik:
natija = natija * 2 + int(raqam)
return natija
for s in ["100101", "11111111", "0"]:
print(onlikka(s))