Mam 3 liczby całkowite: 2 od 0 do 255 i jedną od 1 do 31. Chcę z nich zrobić jedną liczbę całkowitą. Mam do dyspozycji wszystkie operatory arytmetyczne i bitowe oraz power i sqrt. Jak to zrobić? Proszę o jak najbardziej skomplikowane rozwiązania.
Co znaczy "zrobić z trzech liczb jedną"? Skleić cyfry, stworzyć unikalny identyfikator...
pierwsza liczba + druga liczba + 3 liczba = s1_liczba najlepiej żeby to było s1_liczba : single;
chyba ze chcesz dodawać to w formie ciąguu np to co przed przecinkiem to przed przecinkiem a to co po przecinku to po przecinku sie dodaje :X
a czy zabieg ma być odwracalny?
Sprecyzuj do czego Ci to potrzebne. Jakis hash robisz czy co?
((a*256+b)*256+c)^X modulo Y
Y liczba pierwsza, większa od 2^24, np. 20000093,
X jakaś 32-bitowa liczba
zabieg prosty i chyba odwracalny.
najkrócej chyba:
type a = array[0 .. 3] of byte;
var b: a;
b[0] := 31;
b[1] := 255;
b[2] := 255;
{ b[3] nie uzywane - moze zawierac losowa liczbe }
i zamiana:
liczba := Integer(b);
z powrotem:
b := a(liczba);
albo drugi sposób ew:
liczba := b[0] or b[1] shl 5 or b[2] shl 13;
z powrotem:
b[0] := n and 31;
b[2] := n shr 5 and 255;
b[3] := n shr 13 and 255;
to daje "czyste" wyniki, możesz pomieszać bity w wyniku czy coś - nie wiem o jakie kombinowanie chodzi ani czy zabieg ma być odwracalny, czy to kod ma być skomplikowany, czy algorytm czy sam wynik ?
w każdym razie 10 bitów jest wolnych i można je dobrze spożytkować
Nie musi być odwracalny, wystarczy że będzie go można powtórzyć i otrzymać ten sam wynik. Skomplikowany ma być algorytm.
hes napisał(a)
Co znaczy "zrobić z trzech liczb jedną"? Skleić cyfry, stworzyć unikalny identyfikator...
Napisać funckcję z 3ma argumentami typu byte, która zwróci np. ShortInt