Archiv pro rubriku: Ostatní

Převod celého čísla do binární reprezentace

Následující text přehledně popisuje převod celého čísla v desítkové soustavě do binární podoby s pomocí několika rozdílných metod.

Výpočet hodnoty v dvojkové reprezentaci

Mezi jeden z nejzákladnějších úkonů patří převedení desítkového údaje do binární podoby. K dosažení tohoto cíle existuje několik metod, osobně za obzvláště efektivní považují postupné dělení. Zvolme si číslo 10010, kde dolní index značí použitou soustavu a proveďme samotný přepočet.

  • 100 : 2 = 50, zbytek 0
  • 50 : 2 = 25, zbytek 0
  • 25 : 2 = 12, zbytek 1
  • 12 : 2 = 6, zbytek 0
  • 6 : 2 = 3, zbytek 0
  • 3 : 2 = 1, zbytek 1
  • 1 : 2 = 0, zbytek 1
Postupně celočíselně dělíme zbývající části původního čísla dvojkou a pamatujeme si zbytky. Ty následně zapíšeme v obráceném pořadí a získáváme výsledný údaj – 11001002.

Dvojkově desítkový kód

Následující způsob převodu čísla si nejprve vstupní informaci rozdělí na jednotlivé cifry v desítkové soustavě a provede jejich transformaci s pomocí výše zmíněného postupu do binární podoby. Číslo 100 se tedy promění na tři části – 1, 0 a 0. Každá třetina využívá k uchování informace čtyři pozice, výsledek vzniká jejich spojením.

  • 110 = 00012
  • 010 = 00002
  • 010 = 00002
Dohromady tedy 0001000000002.

Přímý kód

Do hry nám vstupuje nutnost uložení i záporných záznamů. S jednoduchým řešením přichází princip vložení speciálního bitu, jenž indikuje přítomnost znaménka. Nejprve provedeme převod do binární podoby a poté na začátek přidáme příslušný bit (1 pro záporné číslo, kladný údaj získá 0).

  • 10010 = 011001002
  • -10010 = 111001002

Aditivní kód

S opravdu zajímavým řešením se o slovo hlásí následující princip vyžadující znalost určité konstanty. Ta se po získání dvojkové podoby k mezivýsledku binárně připočítá. Jako konstantu v tomto případě zvolíme např. 128 (27), což se rovná 100000002.

  • 10010 = 11001002 + 100000002 = 111001002
V případě záporného údaje pro rychlý výpočet použijeme odlišný postup. Nejprve od konstanty v desítkové soustavě odečteme absolutní hodnotu vstupního údaje a výsledek převedeme do dvojkové reprezentace.
  • -10010 = 128 – |-100| = 2810
  • 2810 = 111002

Inverzní kód

V případě kladného čísla se inverzní kód nijak neprojeví, spoléhá totiž na standardní převod do binární soustavy. U záporného údaje provede logickou negaci všech cifer a na začátek přidá bit o hodnotě 1 symbolizující znaménko.

  • na -100 aplikujeme absolutní hodnotu
  • 10010 = 11001002 (převod do dvojkové podoby)
  • 0011011 (logická negace)
  • 10011011 (přidání bitu)

Doplňkový kód

S podobným principem jako inverzní kód přichází i tato metoda. Kladná čísla opět nechává netknutá. U záporných také neguje cifry, přičemž navíc přidává binární připočítání hodnoty 1. Závěrem vstupuje na scénu bit s hodnotou 1 umístěný na začátek k signalizaci znaménka.

  • na -100 aplikujeme absolutní hodnotu
  • 10010 = 11001002 (převod do dvojkové podoby)
  • 0011011 (logická negace)
  • 0011100 (binární přičtení hodnoty 1)
  • 10011100 (přidání bitu)

UTF-8 a binární i hexadecimální reprezentace

UTF-8 a binární i hexadecimální reprezentaceNásledující text pokrývá problematiku převodu textu do binární podoby v rámci kódování UTF-8. Pakliže toužíte vědět, jak výsledná informace vypadá, jste na správné adrese.

K převodu použiji krátké české slovo řepa. To se skládá ze čtyř znaků, což značí i počet nahlédnutí do Unicode tabulky. Zaměřím se přitom na hexadecimální formát. V případě ř se dozvídám údaj 15916, jenž transformuji do binární podoby 1 0101 1001 2. Nyní je třeba určit, kolik bajtů potřebuji k uložení. Jak patrně víte, jeden bajt uchová 8 bitů. V mém případě však binární číslo čítá 9 bitů. O slovo se však hlásí i určitá režie, jenž pomáhá identifikovat počet bajtů dané sekvence. Ke specifikování volného prostoru poslouží níže zobrazená tabulka, kterou naleznete na Wikipedii. Ta říká, že manipulovat lze pouze s pozicemi označenými jako x. K uložení devíti bitů tedy použiji dva bajty.

UTF-8

Momentálně proto stojím před následujícím problémem. Disponuji přiděleným prostorem 110xxxxx 10xxxxxx a chci co něj vložit 1 0101 1001. Musím přitom dodržet, aby se vpravo objevil nejméně významný bit. Ten se nachází na poslední pozici čísla v binárním tvaru. Ve své podstatě udává, zda-li mám to odčinění s lichým nebo kladným údajem. Nejméně přitom dokáže ovlivnit hodnotu čísla, například v desítkové reprezentaci. Můj údaj 1 0101 1001 tedy začínám vkládat z pravé strany a nejprve obohatím druhý bajt – 110xxxxx 10011001. Následně pokračuji vložením zbývající zeleně vyznačené části z 1 0101 1001 do 110xx101 10011001. Jak nyní vidíte, mám dva volné bity, jenž nechci použít. Vložím proto nuly (11000101 10011001) a získávám binární reprezentaci znaku ř v kódování UTF-8. Pro přehlednost mohu výsledek převést do hexadecimální soustavy – C5 99.

Obdobným způsobem pokračuji i v případě znaků ‚e‚ ‚p‚ i ‚a‚, jen si tentokrát vystačím s jediným bajtem.

Na závěr dostávám:

  • ř – C5 9916 – 11000101 100110012
  • e – 6516 – 011001012
  • p – 7016 – 011100002
  • a – 6116 – 011000012

K ověření lze využít tento nástroj.

Seznam českých podstatných jmen

Seznam podstatných jmenK naplnění podstaty jednoho mého projektu jsem potřeboval získat poněkud specifická data – česká podstatná jména v prvním pádě. Nejprve jsem předpokládal, že podobný seznam musím s pomocí webového vyhledávače nalézt. Bohužel jsem však narážel pouze na nefunkční odkazy. Postupně jsem se proto smiřoval s faktem, že kýžený soupis budu vytvářet na vlastní pěst. Mé myšlenky směřovaly k využití nejrůznějších slovníků používaných pro kontrolu pravopisu a tento nápad mi následně potvrdil i jeden tip, jenž jsem během procházení internetu objevil.

Problémy nečiní ani jiné slovní druhy

K získání seznamu nejprve zamiřte na www.openoffice.cz, kde stáhnete český slovník ve formátu oxt. U souboru následně zaměňte koncovku na zip a použijte libovolný dekomprimační nástroj. Uvnitř archívu čeká několik souborů, z nichž pro nás momentálně nejzajímavější nese označení cs_CZ.dic. Doporučuji se rovněž seznámit s přiloženou licencí. Zmíněný souhrn pochází původně ze slovníku pro ispell a přichází s formátem, jenž umožňuje identifikovat kýžené objekty zájmu. Pro tento účel jsem vytvořil jednoduchý skript v PHP, jenž celý soubor postupně projde a vybere pouze ta slova, o které má daný uživatel skutečně zájem. V mém případě šlo o řádky, jenž za symbolem lomítka (/) obsahovaly buď znak H nebo Z.

$lines = file("./cs_CZ.dic");
$fileName = "podstatna_jmena.txt";
for($i = 0 ; $i < count($lines); $i++)
{
 $currentLine = explode("/", $lines[$i]);
 if( (strpbrk($currentLine[1], "HZ") != false) )
 {
 file_put_contents($fileName, $currentLine[0]."\n", FILE_APPEND);
 }
}

Nejprve jsem celý obsah slovníku s pomocí funkce file proměnil na pole. Následovalo jeho procházení s pomocí klasického iteračního cyklu. Na každý řádek byla aplikována snaha o jeho rozdělení na dvě poloviny díky explode. Pokud funkce strpbrk nalezla kýžený písmenný znak, dovolila provést zápis do druhého pomocného souboru. Po ukončení činnosti scriptu jeho obsah tvořily pouze slovní druhy, o něž skutečně stojíte – zde tedy konkrétně výhradně podstatná jména. Jejich předání dalšímu programu či scriptu následně již nic nezabrání.

Příchozí dotazy:

  • slovník podstatných jmen
  • seznam podstatných jmen
  • seznam českých slov
  • slovník českých slov txt
  • databáze českých slov
  • česká podstatná jména
  • seznam českých podstatných jmen