Diskuze: Bitové operátory - Nejasnost ve zdrojovém kódu
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Děkuju za odpověd .. Ale proč je tam řídící proměnná t nastavena na 128 a pak se při každé iteraci cyklu snižuje na polovinu?
Protože to jsou mocniny dvojky
128 -> 64 -> 32 -> 16 -> 8 -> 4 -> 2 -> 1
Důležitější je ale reprezentace v binární podobě:
128 = 10000000
64 = 01000000
32 = 00100000
16 = 00010000
8 = 00001000
4 = 00000100
2 = 00000010
1 = 00000001
takže potom ve výrazu
(hodn & t) != 0)
t nabývá výše uvedených hodnot.
Dále logický operátor AND má následující tabulku:
A | B | Q |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Takže výraz nahoře bude platný pouze v případě, že proměnná hodn bude mít na pozici t jedničku, ale to už bylo zmíněno o příspěvek výše.
Mockrát děkuji .. Už to chápu, porovnávají se postupně bity čísla 123 s s jedničkami na všech místech díky dělení čísla 128 dvěmi v každé iteraci cyklu.. Moc Jste mi pomohli, děkuji oboum
no nejsem si úplně jistý, že to chápeš - celé to je postavené na bitovém posunu to znamená, že v binárním čísle 10000000 - dekadicky 128 se ta jednička posouvá (v tomto případě) o jednu pozici do prava - zde je jen realizovaný za pomoci dělení dvojkou, případně jejich násobků
takže
128/2 (dělení)
je totéž jako
0b10000000 >>1 (posun o jeden bit)
výsledek je 0b01000000 - dekadicky 64
stejně tak
128/4 (dělení)
je totéž jako
0b10000000 >>2 (posun o dva bity)
výsledek je 0b00100000 - dekadicky 32
atd.........
Zobrazeno 6 zpráv z 6.