Sobes.tech
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