Mam tu problem z zadaniem. Użytkownik podaje 16-bitową liczbę całkowitą (short int) i ta liczba jest szyforwana inną 16-bitową liczbą całkowitą (też short int). No i tam w zadaniu jest napisane, że klucz i liczbę zaszyfrowaną czyli dwa short inty jak rozumiem łączymy w jednego inta tak aby utworzyć wiadomość z tym, że klucz ma zajmować młodsze pozycje. No i nie mam pojęcia jak to zrobić, tzn. nie wiem połączyć dwie liczby 16-bitowe w jedną 32-bitową. Jak ktoś mi pomoże będę bardzo wdzięczny.
0
0
Najprościej?
unsigned short int foo[2];
foo[0]=1;
foo[1]=1;
unsigned int bar = *reinterpret_cast<int*>(foo);
Da nam to w efekcie 65537 czyli 00000000000000010000000000000001
czyli to co chcieliśmy
0
A da się bez wskaźników?
0
Na upartego to wszystko się da.
union foo{
unsigned short int bar[2];
unsigned int baz;
};
//
foo zmienna;
zmienna.bar[0]=1;
zmienna.bar[1]=1;
unsigned int scalenie = zmienna.baz
2
Nie można po prostu tak?
scalone = a | (b << 16)
0
A wracając do mojego algorytmu to jak zanegować jakiś pojedyńczy bit w liczbie. Przykładowo mam liczbę 17(10) czyli binarnie 10001(2). Chciałym zanegować powiedzmy drugi bit tej liczby czyli otrzymać liczbę 11001(2)=25(10).
1
To co masz w treści zadania to ~(liczba ^ klucz)