Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 16. 10. 2021 14:06

idkfa2017
Zelenáč
Příspěvky: 8
Reputace:   
 

převody číselných soustav

Základem je desítková soustava: 123 je 1x10^2+2x10^1+3x10^0   
Číslo 0xAB v 16 soustavě je 10x16^1+11x16^0=10x16+11x1=171....To nechápu, jak to má člověk z toho "vydedukovat".

Offline

 

#2 16. 10. 2021 18:51

Richard Tuček
Místo: Liberec
Příspěvky: 1272
Reputace:   20 
Web
 

Re: převody číselných soustav

Dvojková soustava má 2 znaky (0, 1), desítková 10 znaků.
Šestnáctková soustava má 16 znaků, 0-9, a místo znaků
10, 11, 12, 13, 14, 15 používá písmena po řadě
A,   B,   C,  D,  E ,  F
např. po  FF je 100, což je v desítkové soustavě 255, 256

Offline

 

#3 16. 10. 2021 19:07

idkfa2017
Zelenáč
Příspěvky: 8
Reputace:   
 

Re: převody číselných soustav

po  FF je 100, což je v desítkové soustavě 255, 256

Proč přesně tomu tak je? Mám do školy vypracovat kód na převod mezi číselnými soustavami, to sem udělal, ale nechápu, jak to funguje.

Code:

using System;
using System.Text;
using Knihovna;

namespace konverze
{
    public class Konvertor
    {
        private const string ČÍSLICE = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        private int základ;
        public Konvertor(int _základ)
        {
            if (_základ < 2) throw new Exception("Základ menší než 2");
            if (_základ > 36) throw new Exception("Základ větší než 36");
            základ = _základ;
        }
        public string Konvertuj(int n)
        {
            if (n == 0)
            {
                return "0";
            }
            StringBuilder číslo = new StringBuilder("");
            bool záporné = n < 0;
            if (záporné)
            {
                n = Math.Abs(n);
            }
            while (n != 0)
            {
                číslo.Append(ČÍSLICE[n % základ]);
                n /= základ;
            }
            if (záporné)
            {
                číslo.Append("-");
            }
            int i = 0, j = číslo.Length - 1;
            while (i < j)
            {
                char pom = číslo[i];
                číslo[i++] = číslo[j];
                číslo[j--] = pom;
            }
            return číslo.ToString();
            //char[] znaky = číslo.ToString().ToCharArray();
            //Array.Reverse(znaky);
            //return new string(znaky);
        }
    }

    class Test
    {
        static void Main()
        {
            Console.Write("Zadejte základ cílové soustavy (2 - 36): ");
            int základ = Vstup.ČtiInt();
            Konvertor konvertor = new Konvertor(základ);
            Console.Write("Zadejte číslo, které do ní chcete převést: ");
            int co = Vstup.ČtiInt();
            Console.WriteLine(konvertor.Konvertuj(co));
            //Console.Read();
        }
    }
}

Offline

 

#4 17. 10. 2021 13:28

Placka03
Příspěvky: 186
Škola: Gymnázium
Pozice: student
Reputace:   
 

Re: převody číselných soustav

↑ idkfa2017:

Podívej se třeba na trojkovou soustavu. Ta se skládá jen ze tří znaků (0, 1, 2) a jakmile všechny znaky dojdou, přidá se na začátek čísla nová cifra. Přirozená čísla zapsaná v trojkové soustavě by tedy byla:

1 = 1
2 = 2
3 = 10
4 = 11
5 = 12
6 = 20
7 = 21
8 = 22
9 = 100
10 = 101
11 = 102
12 = 110
...

Jednotlivé číslice (od konce) čísla zapsaného v trojkové soustavě představují mocniny trojky. Například číslo 20121 v trojkové soustavě obsahuje:
- jednou jedničku (3⁰),
- dvakrát trojku (3¹),
- jednou devítku (3²),
- nulakrát dvacet sedmičku (3³),
- dvakrát osmdesát jedničku (3⁴).
Tedy v desítkové soustavě máme 1 + 6 + 9 + 0 + 162 = 178.

Podobně třeba 1120₃ = 0 · 1 + 2 · 3 + 1 · 9 + 1 · 27 = 6 + 9 + 27 = 42₁₀.

Při převodu z trojkové do desítkové soustavy můžeme postupovat obdobně:
42₁₀ = 0 · 1 + 2 · 3 + 1 · 9 + 1 · 27 = 1120₃

Šestnáctková soustava funguje stejně, jen je v ní znaků 16 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). Přirozená čísla by zkráceně vypadala takto:

1 = 1
2 = 2
...
8 = 8
9 = 9
10 = A
11 = B
...
15 = F
16 = 10
17 = 11
18 = 12
...

Číslice reprezentují mocniny 16:

35F1₁₆ = 1 · 16⁰ + F · 16¹ + 5 · 16² + 3 · 16³ = 1 · 1 + 15 · 16 + 5 · 256 + 3 · 4 096 = 1 + 240 + 1 280 + 12 288 = 13 809₁₀
AB₁₆ = B · 16⁰ + A · 16¹ = 11 · 1 + 10 · 16 = 11 + 160 = 171₁₀

73₁₀ = 4 · 16¹ + 9 · 16⁰ = 49₁₆

Offline

 

#5 17. 10. 2021 15:14

idkfa2017
Zelenáč
Příspěvky: 8
Reputace:   
 

Re: převody číselných soustav

Mě to celý nedává smysl, je v tom bordel a přijde mi to značně nepraktický.

Offline

 

#6 17. 10. 2021 15:30

Richard Tuček
Místo: Liberec
Příspěvky: 1272
Reputace:   20 
Web
 

Re: převody číselných soustav

Je to naprosto jasné, např. dvojková soustava vypadá takto

   0        0
   1        1
10        2
11        3
100      4
101      5
110      6
111      7
1000     8
atd.

Myslím, že Vám to kolega vysvětlil.

Ještě něco:
16 je mocnina čísla 2
např.:  50=(110010) ve dvojkové
50=(0011 0010)=(32) v šestnáctkové

Offline

 

#7 17. 10. 2021 15:35 — Editoval Placka03 (17. 10. 2021 15:36)

Placka03
Příspěvky: 186
Škola: Gymnázium
Pozice: student
Reputace:   
 

Re: převody číselných soustav

↑ idkfa2017:

Jelikož čísel je nekonečně mnoho, nemůžeš mít pro každé vlastní značku. Tento problém lze vyřešit použitím číselných soustav, např. nepoziční soustava římských čísel nebo poziční soustava arabských čísel. Můžeš si vybrat libovolný počet znaků a vymyslet systém, jak je kombinovat k získání libovolného čísla.

Běžně používáme znaků deset (0, 1, ..., 9). Každý znak v tomto pořadí reprezentuje číslo od 0 do 9, ale pro vyšší čísla je třeba tyto znaky kombinovat. Jakmile překročíš 9, přidáš před číslo další číslici a celý cyklus můžeš opakovat.

Desítkovou soustavu používáme z historických důvodů. V některých situacích je ale výhodnější přejít do soustavy jiné. Například počítače pracují ve dvojkové soustavě, protože je pro ně jednodušší pracovat jen se dvěma číslicemi (1 nebo 0 - proud prochází nebo neprochází). Naopak vyššího počtu znaků se využívá v situacích, kdy je třeba zkráceně zapsat větší čísla. Třeba při zápisu barvy v rgb modelu se často používá šestnáctková soustava, protože umožňuje napsat tři čísla 0 až 255 (0 - FF) pomocí šesti znaků.

Možná bude lepší, když vedle sebe uvidíš přirozená čísla s nulou v různých soustavách s nulami doplněnými na začátky těchto čísel, které se běžně vynechávají:

Desítková        Dvojková        Trojková        Šestková        Šestnáctková
000000        000000        000000        000000        000000
000001        000001        000001        000001        000001
000002        000010        000002        000002        000002
000003        000011        000010        000003        000003
000004        000100        000011        000004        000004
000005        000101        000012        000005        000005
000006        000110        000100        000010        000006
000007        000111        000101        000011        000007
...

Offline

 

#8 18. 10. 2021 15:54

MichalAld
Moderátor
Příspěvky: 5360
Reputace:   130 
 

Re: převody číselných soustav

idkfa2017 napsal(a):

Mě to celý nedává smysl, je v tom bordel a přijde mi to značně nepraktický.

Nejdřív zkus vymyslet, co ti přijde tak speciálního a praktického zrovna na desítkové soustavě.

Šestnáctková se používá zejména proto, že se dá jednoduše převádět na dvojkovou (bez nějakého složitého počítání), a dvojková proto, že v ní počítají počítače. Jiné soustavy se nepoužívají...aspoň né běžně...

Samozřejmě, že 16-ková soustava potřebuje 16 symbolů, a my jich máme jen 10, proto se zbytek doplňuje písmeny A-F.

Offline

 

#9 18. 10. 2021 19:27

vanok
Příspěvky: 14611
Reputace:   742 
 

Re: převody číselných soustav

Pozdravujem ↑ MichalAld:,
Toto https://fr.wikiversity.org/wiki/Code_de … nt_de_base sa oplati precitat .
Maly slovnik postaci.


Srdecne Vanok
The respect, the politeness are essential qualities...and also the willingness.
Do not judge the other one.
Ak odpovedam na nejaku otazku. MOJ PRINCIP NIE JE DAT ODPOVED ALE UKAZAT AKO SA K ODPOVEDI DOSTAT

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson