o‘zing o‘rgan
Dasturchi uchun matematika va olimpiada 1-dars / 15
Filbek

Sanoq tizimlari: ikkilik va o‘n oltilik

O‘nlik, ikkilik, o‘n oltilik; bir-biriga o‘tkazish; ranglar kodi

1-bob. Matematik fikrlash 20 daqiqa Python 4 savol

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
main.py Ctrl+Enter — ishga tushirish
input() uchun ma'lumotlar
Kodni yozib, «Ishga tushirish» ni bosing. Birinchi marta Python yuklanishi bir necha soniya oladi.
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))

O'zingizni tekshiring

Savol 1 / 4

Ikkilik 1010 o‘nlikda qancha?

Variantlar

Savol 2 / 4

Bitta hex raqam necha bitga teng?

Variantlar

Savol 3 / 4

Hex’da F qaysi son?

Variantlar

Savol 4 / 4

#00FF00 qaysi rang?

Variantlar