Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 9. 3. 2013 22:14:17

imcon
Člen
Místo Brno
Registrace: 16. 5. 2007
Příspěvků: 177

Převod většího čísla na binární formát (lepší DEC2BIN)? - VYŘEŠENO

Dobrý den,
potřeboval bych převádět čísla na binární formát. Funkce DEC2BIN ale převede max 9 bitovou hodnotu. Potřebuji převádět cca 30 bitová čísla.
Poradíte funkci která toto umožňuje?
Nebo bude řešení pouze v naprogramování vlastní funkce?
Děkuji.


_______________________________________
Značím jako vyřešené


;o)

Editoval sedlacekdan (4. 4. 2013 18:29:36)

Offline

#2 10. 3. 2013 07:37:03

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,678

Re: Převod většího čísla na binární formát (lepší DEC2BIN)? - VYŘEŠENO

Ta funkce je v relaci s Unicode. Je tedy logické, že to asi nepůjde. Hexadeximální, octal i decimální formát určitě může mnohem více, a neměl by být ani problém jakékoliv číslo přepsat do binární podoby. Jenže neznám ani důvod proč něco takového dělat.


Tak jsem se raději podíval do nápovědy a ejhle DEC2BIN nemůžu najít a vím, že jsem s těmi funkcemi (je jich víc - BIN2DEC, HEX2BIN a podobně) pracoval. Mám AOO 3.4.1 (build 9593). Našel jsem je až LO 4. kterou jsem si paralelně nainstaloval kvůli odzkoušení. Je to tak - převádí jen 9 bitů (512 výrazů). 30 bitů je něco přes 100 milionů výrazů.


Převod není až takový problém. Jen mne udivuje, že mluvíte nejprve jako o převodu dec-bin, a pak uvádíte 2^30 na dec. Takže jde vlastně o převod bin-dec, nebo opačně? A nebo oba převody?

Pokud budete potřebovat jen vyjímečně takový převod (a máte - li k dispozici nějakou vědeckou kalkulačku, jako je například ve Win, ale jsou i jiné), tak ty mají režim přepínání mezi jednotlivými formáty čísel.


Vlastní funkce by měla jen zobrazovat - například string '0011000111100000010... nebo čísla 001000011000111111111...? Jde o koncový efekt - k čemu to je?

Decimální formát v podstatě dělíme dvojkou. Jinou cestou je vygenerovat binární tvar přímo jako variace s opakováním pro "n" = 1, a "k" = 30 a používat to jako databázi ke vzájemnému převodu.

Editoval neutr (10. 3. 2013 07:46:26)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 10. 3. 2013 23:11:56

imcon
Člen
Místo Brno
Registrace: 16. 5. 2007
Příspěvků: 177

Re: Převod většího čísla na binární formát (lepší DEC2BIN)? - VYŘEŠENO

Děkuji za odpověď a upřesňuji:
1. Proč něco takového dělat: tak například aby bylo vidět jak vypadá/jak je složeno 29 bitové číslo (konkrétně se jedná o složení 29 bitového identifikátoru PGN CAN zprávy).
2. "...Jen mne udivuje...pak uvádíte 2^30 na dec..." - nerozumím. Potřeboval jsem převést 29 bitovou hodnotu (tedy čísla 0 až 2^29) na binární zobrazení, 30 jsem uvedl pro obecnost, to není důležité
3. Ano vědeckou kalkulačku mohu použít, ale potřeboval jsem rychle upravit tabulku - vizualizovat hodnoty s cca 5000 čísly, což jaksi ručně dělat nebudu, od toho mám Calc
4. K čemu je zobrazení - pouze pro vizualizaci obsahu čísla
5. Určitě lze k obecnému převodu napsat funkci, programuji ale spíše v Delphi a tak nejsem v psaných funkcích LO zběhlý, délka psaní by byla neúnosná výsledku, předpokládal jsem, že existuje hotová funkce.
6. "...jako variace s opakováním pro "n" = 1..." toto jsem nepochopil, zřejmě nemám dostatečné znalosti
.
= nakonec jsem si 29 bitové číslo napřed rozložil na menší části dle obsahu a ty, protože jsou menší než 8 bitů, se již dají zobrazit funkcí DEC2BIN.

Offline

#4 11. 3. 2013 06:58:13

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,678

Re: Převod většího čísla na binární formát (lepší DEC2BIN)? - VYŘEŠENO

- k bodu 5. Hotová funkce pro libovolný převod dec - bin nebude k dispozici. Někdo by mohl chtít převod například 128 bitů, a jiný zase 1024.
- k bodu 6. Je to tak. Já se zabývám už leta letoucí kombinatorikou. Binární množinu můžeme vygenerovat právě jen jako variaci s opakováním, kde "k" = počet míst, a "n" - počet možných. Takže generátory iterují pro vytvoření binární množiny od 0 do 1.
- Je docela rozdíl v tom, jak funkci pro převod definujeme. Je možné vytvořit funkci, která přepočítá zadané desítkové číslo následně vyplivne řetězec jedniček a nul. Jiným typem je ten, který lexikálně vygeneruje celou množinu binárních výrazů. Která je vhodnější rozhoduje účel.

V současné době mám již prakticky připraveno rozšíření pro Calc, ve kterém jsou uvedeny vzorce kombinací, variací.... a také variací s opakováním. Tedy jsou to vzorce, nikoliv funkce (makra), a jsou postabeny jen do třídy 5. Ale mohou Vám objasnit právě podstatu Vámi definovaného 6. bodu.
(Rozšíření má nabídky vzorců, vlastní vzorce jsou funkční, ale nenmám dodělané přílohy s návody.)
Dal jsem tanto základ na Wiki kvůli otestování, zda to funguje také například na Linuxech, které já nemám. Mělo by to být hotové brzo. Máte - li zájem linknu sem z Wiki tu testovací verzi.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 3. 4. 2013 15:40:48

LADER
Člen
Registrace: 3. 4. 2013
Příspěvků: 91

Re: Převod většího čísla na binární formát (lepší DEC2BIN)? - VYŘEŠENO

=CONCATENATE(DEC2BIN(MOD(FLOOR(H5/16777216;1);256);8);DEC2BIN(MOD(FLOOR(H5/65536;1);256);8);DEC2BIN(MOD(FLOOR(H5/256;1);256);8);DEC2BIN(MOD(H5;256);8))

Převede decimální číslo uložené v buňce [H5] na binární v délce 32 bitů.
Pro jinou adresu buňky jak [H5] je potřeba přepsat (ve vzorci se vyskytuje 4x).

Offline

#6 3. 4. 2013 21:59:31

LADER
Člen
Registrace: 3. 4. 2013
Příspěvků: 91

Re: Převod většího čísla na binární formát (lepší DEC2BIN)? - VYŘEŠENO

Makro:

Function mDec2Bin(X as Double) as String
	Dim S as String 
	X = Int(Abs(X))
	While X > 0 
		S = CStr(X mod 2) + S
		X = Int(X / 2)
	Wend
	mDec2Bin = S
End Function

Offline

#7 4. 4. 2013 13:02:34

LADER
Člen
Registrace: 3. 4. 2013
Příspěvků: 91

Re: Převod většího čísla na binární formát (lepší DEC2BIN)? - VYŘEŠENO

Ještě kosmetická úprava výstupního formátu (zobrazuje vždy řetězec dlouhý 31 bitů):

Function fDec2Bin(X as Double) as String
	Dim S as String
	X = Int(Abs(X)) 
	While X > 0 
		S = CStr(X mod 2) + S
		X = Int(X / 2)	
	Wend
	fDec2Bin = Right(String(32,"0") + S, 31)
End Function

Offline

#8 4. 4. 2013 18:29:03

sedlacekdan
Moderátor
Místo Nehvizdy
Registrace: 21. 6. 2010
Příspěvků: 617

Re: Převod většího čísla na binární formát (lepší DEC2BIN)? - VYŘEŠENO

Pěkná práce, myslím že problém je vyřešen


;o)


Linux Mint 16 Petra - Apache OpenOffice 4.0.1
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#9 6. 4. 2013 23:26:35

imcon
Člen
Místo Brno
Registrace: 16. 5. 2007
Příspěvků: 177

Re: Převod většího čísla na binární formát (lepší DEC2BIN)? - VYŘEŠENO

Super, díky za všechny odpovědi.

Offline

Zápatí