Stránka 1 z 1

Maskování dekadických čísel

Napsal: 29 lis 2020, 10:24
od Ludek
Mám dotaz. Binární čísla umím maskovat, ale jak to jde s číslem dekadickým?
Příklad.
Mám číslo long a zajímá mě pouze spodních 16 bitů - ty horní né.
Když to rovnou převedu do unsigned int, tak to samozřejmě je nesmysl...
Jak se jich zbavím? Jak z toho udělám to dolní číslo?

Re: Maskování dekadických čísel

Napsal: 29 lis 2020, 12:34
od ondraN
Nějak jsem nepochopil jak to myslíš s dekadickým číslem a dále uvádíš že tě zajímá jen dolních 16bitů.
Pokud tě zajímá jen dolních 16bitů z longu, je to jednoduché

Kód: Vybrat vše

unsigned long  x=1234567891233;
x=x & 0xFFFFUL;
používá se operace and pak máš v x jen těch 16bitů (to UL za 0xFFFF znamená že je to typově unsigned long)

S dekadickými čísly, když potřebuješ třeba jen poslední tři řády (jednotky, desítky, stovky) je to následovné

Kód: Vybrat vše

unsigned long x=123456789;
x=x%1000;
tady bude v x 789;
používá se operace modulo (%), což je zbytek po celočíselném dělení, v tom příkladu tisíci.

Re: Maskování dekadických čísel

Napsal: 29 lis 2020, 14:10
od Ludek
Ahoj Ondro,
tak to nefunguje, mám stejné výsledky jako jsem si hrál já.
příklad : (vše mám unsigned long)
x = 3456789;
x=x & 0xFFFFUL;
výsledek : 48917
ono to funguje POUZE na HEX čísla, což je logické,
ALE z těmi % to šlape !!!!!

díky MOC

Re: Maskování dekadických čísel

Napsal: 30 lis 2020, 09:03
od KamilV
Ludek píše:
29 lis 2020, 14:10
příklad : (vše mám unsigned long)
x = 3456789;
x=x & 0xFFFFUL;
výsledek : 48917
Což je naprosto správný výsledek.
Chyba byla pravděpodobně v tom, že jsi od spodních 16 bitů očekával něco jiného a v důsledku toho jsi správný výsledky považoval za chybný.