Junior
Ako môžete násobiť alebo deliť celé číslo dvomi pomocou bitových operácií?
sobes.tech AI
Odpoveď od AI
Na násobenie číslom 2 sa používa posun bitov doľava (<<). Na delenie číslom 2 sa používa posun bitov doprava (>>).
int num = 10;
int násobok_2 = num << 1; // num * 2 = 20
int delenie_2 = num >> 1; // num / 2 = 5 (pre kladné čísla)
Pri delení záporného čísla dvoma pomocou posunu bitov doprava (>>) závisí výsledok od typu posunu:
- Logický (unsigned): Uvoľnené bity vľavo budú doplnené nulami.
- Aritmetický (signed): Uvoľnené bity vľavo budú doplnené hodnotou znamienkového bitu (na zachovanie znamienka).
V jazyku C/C++ sa pre znamienkové typy používa aritmetický posun. To môže viesť k neočakávaným výsledkom pri nepárnych záporných číslach:
int negative_num = -7;
int delenie_2_signed = negative_num >> 1; // -4 (nie -3)
Na správne delenie záporných čísel dvoma s zaokrúhľovaním smerom k nule sa môže použiť nasledujúca technika:
int negative_num = -7;
int delenie_2_korektne = (negative_num >= 0) ? (negative_num >> 1) : ((negative_num + 1) >> 1); // -3