Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ

Π£Ρ€ΠΎΠΊ β„–45. ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Обновл. 11 БСн 2021 |

ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π±ΠΈΡ‚Π°ΠΌΠΈ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слоТным. Если Π²Ρ‹ застряли ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ понятно β€” пропуститС этот ΡƒΡ€ΠΎΠΊ (ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ), Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ смоТСтС Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ. Он Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ Π²Π°ΠΆΠ΅Π½ для прогрСсса Π² ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ языка C++, ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΡ€ΠΎΠΊΠΈ, ΠΈ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ здСсь Π² большСй ΠΌΠ΅Ρ€Π΅ для ΠΎΠ±Ρ‰Π΅Π³ΠΎ развития.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹?

Π’ Π΄Π°Π»Π΅ΠΊΠΎΠΌ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ памяти Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ ΠΈ Сю сильно Π΄ΠΎΡ€ΠΎΠΆΠΈΠ»ΠΈ. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ стимулом максимально Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ доступный Π±ΠΈΡ‚. НапримСр, Π² логичСском Ρ‚ΠΈΠΏΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… bool Π΅ΡΡ‚ΡŒ всСго лишь Π΄Π²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… значСния (true ΠΈ false), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСны ΠΎΠ΄Π½ΠΈΠΌ Π±ΠΈΡ‚ΠΎΠΌ, Π½ΠΎ ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Ρ†Π΅Π»Ρ‹ΠΉ Π±Π°ΠΉΡ‚ памяти! А это, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ адрСса памяти, Π° ΠΎΠ½ΠΈ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Π°ΠΉΡ‚Π°Ρ…. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ bool Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 1 Π±ΠΈΡ‚, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ 7 Π±ΠΈΡ‚ β€” тратятся Π²ΠΏΡƒΡΡ‚ΡƒΡŽ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят ΡƒΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ 8 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° bool Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1 Π±Π°ΠΉΡ‚, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сэкономит ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти. Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Ρ€ΡŽΠΊ Π±Ρ‹Π» ΠΎΡ‡Π΅Π½ΡŒ популярСн. Но сСгодня, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, это Π½Π΅ Ρ‚Π°ΠΊ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ памяти стало сущСствСнно большС ΠΈ программисты ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ понятнСС Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π½Π΅ΠΆΠ΅Π»ΠΈ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π΄ΠΈ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ экономии памяти. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ спрос Π½Π° использованиС ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² нСсколько ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΡΡ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случаСв, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΡƒΠΆ максимальная оптимизация (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°ΡƒΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π΄Π°Π½Π½Ρ‹Ρ…; ΠΈΠ³Ρ€Ρ‹, Π³Π΄Π΅ манипуляции с Π±ΠΈΡ‚Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ скорости; встроСнныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π³Π΄Π΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°).

Π’ языкС Π‘++ Π΅ΡΡ‚ΡŒ 6 ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²:

x

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π‘ΠΈΠΌΠ²ΠΎΠ» ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ
ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг Π²Π»Π΅Π²ΠΎ>x >> yВсС Π±ΠΈΡ‚Ρ‹ Π² x ΡΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π²ΠΏΡ€Π°Π²ΠΎ Π½Π° y Π±ΠΈΡ‚
ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ НЕВсС Π±ΠΈΡ‚Ρ‹ Π² x ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Π΅
ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ И&x & yΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±ΠΈΡ‚ Π² x И ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ Π±ΠΈΡ‚ Π² y
ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Π˜Π›Π˜|x | yΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±ΠΈΡ‚ Π² x Π˜Π›Π˜ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ Π±ΠΈΡ‚ Π² y
ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Π˜Π›Π˜ (XOR)^x ^ yΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±ΠΈΡ‚ Π² x XOR с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π΅ΠΌΡƒ Π±ΠΈΡ‚ΠΎΠΌ Π² y

Π’ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… опСрациях слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ цСлочислСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… unsigned, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ C++ Π½Π΅ всСгда Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² с цСлочислСнными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ signed.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ цСлочислСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… unsigned.

ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг Π²Π»Π΅Π²ΠΎ ( >)

Π’ языкС C++ количСство ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π±ΠΈΡ‚ основываСтся Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… (Π² 1 Π±Π°ΠΉΡ‚Π΅ находятся 8 Π±ΠΈΡ‚). ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сдвига Π²Π»Π΅Π²ΠΎ ( ) сдвигаСт Π±ΠΈΡ‚Ρ‹ Π²Π»Π΅Π²ΠΎ. Π›Π΅Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ являСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ, Π° ΠΏΡ€Π°Π²Ρ‹ΠΉ β€” количСство мСст, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ 3 ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π² Π²ΠΈΠ΄Ρƒ Β«ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Π±ΠΈΡ‚Ρ‹ Π²Π»Π΅Π²ΠΎ Π² Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π΅ 3 Π½Π° ΠΎΠ΄Π½ΠΎ мСсто».

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с 4-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ значСниями.

Рассмотрим число 3, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ систСмС Ρ€Π°Π²Π½ΠΎ 0011:

Π’ послСднСм Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ случаС ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ‚ пСрСмСщаСтся Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ самого Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°! Π‘ΠΈΡ‚Ρ‹, сдвинутыС Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ числа, Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ навсСгда.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сдвига Π²ΠΏΡ€Π°Π²ΠΎ ( >> ) сдвигаСт Π±ΠΈΡ‚Ρ‹ Π²ΠΏΡ€Π°Π²ΠΎ. НапримСр:

12 = 1100
12 >> 1 = 0110 = 6
12 >> 2 = 0011 = 3
12 >> 3 = 0001 = 1

Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ случаС ΠΌΡ‹ снова пСрСмСстили Π±ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°. Он Ρ‚Π°ΠΊΠΆΠ΅ потСрялся навсСгда.

Π₯отя Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅, ΠΌΡ‹ смСщаСм Π±ΠΈΡ‚Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°Ρ…, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π±ΠΈΡ‚Ρ‹ ΠΈ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈΠ”Π°Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ посвящён Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌ опСрациям (опСрациям с Π±ΠΈΡ‚Π°ΠΌΠΈ, Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, bitmath), ΠΈΠ· Π½Π΅Π³ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π±ΠΈΡ‚Π°ΠΌΠΈ – элСмСнтарными ячСйками памяти ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. ΠœΡ‹ ΡƒΠΆΠ΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ опСрациями Π² ΡƒΡ€ΠΎΠΊΠ΅ ΠΏΡ€ΠΎ рСгистры ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, сСйчас рассмотрим всё максимально ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. Данная Ρ‚Π΅ΠΌΠ° являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых слоТных для понимания Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠ³ΠΎ курса ΡƒΡ€ΠΎΠΊΠΎΠ², Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрёмся, Π·Π°Ρ‡Π΅ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±ΠΈΡ‚Π°ΠΌΠΈ:

Π”Π°Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ основан Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅ ΠΏΠΎ Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌ опСрациям ΠΎΡ‚ Arduino, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ здСсь – Ρ‚Π°ΠΌ всё описано Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

Двоичная систСма ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…

2 Π² стСпСниDECBIN
010b00000001
120b00000010
240b00000100
380b00001000
4160b00010000
5320b00100000
6640b01000000
71280b10000000

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π΄Π²ΠΎΠΉΠΊΠΈ явно β€œΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚β€ Π½Π° Π½ΠΎΠΌΠ΅Ρ€ Π±ΠΈΡ‚Π° Π² Π±Π°ΠΉΡ‚Π΅, считая справа Π½Π°Π»Π΅Π²ΠΎ (ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½Π°Ρ‡Π΅). Напомню, Ρ‡Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΉ систСмС исчислСния Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ – ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ всё Ρ€Π°Π²Π½ΠΎ ΠΈ ΠΎΠ½ Π²ΠΎ всём Π²ΠΈΠ΄ΠΈΡ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΈ Π½ΡƒΠ»ΠΈ. Если β€œΡΠ»ΠΎΠΆΠΈΡ‚ΡŒβ€ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π±Π°ΠΉΡ‚ Π² дСсятичном прСдставлСнии Π±ΠΈΡ‚ΠΎΠ², Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π· 255: 128+64+32+16+8+4+2+1 = 255. НСтрудно Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ число 0b11000000 Ρ€Π°Π²Π½ΠΎ 128+64, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 192. ИмСнно Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ получаСтся вСсь Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚ 0 Π΄ΠΎ 255, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ умСщаСтся Π² ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚. Если Π²Π·ΡΡ‚ΡŒ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° – Π±ΡƒΠ΄Π΅Ρ‚ всё Ρ‚ΠΎ ΠΆΠ΅ самоС, просто ячССк Π±ΡƒΠ΄Π΅Ρ‚ 16, Ρ‚ΠΎ ΠΆΠ΅ самоС для 4 Π±Π°ΠΉΡ‚ – 32 ячСйки с Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ ΠΈ нулями, каТдая ΠΈΠΌΠ΅Π΅Ρ‚ свой Π½ΠΎΠΌΠ΅Ρ€ согласно стСпСни Π΄Π²ΠΎΠΉΠΊΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ манипуляции с Π±ΠΈΡ‚Π°ΠΌΠΈ с самого простого – с ΠΌΠ°ΠΊΡ€ΠΎ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΄ΡƒΡ‚ β€œΠ² комплСктС” с ядром Arduino.

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ для манипуляций с Π±ΠΈΡ‚Π°ΠΌΠΈ

Π’ β€œΠ±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅β€ Arduino.h Π΅ΡΡ‚ΡŒ нСсколько ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… макросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π±ΠΈΡ‚Ρ‹ Π² Π±Π°ΠΉΡ‚Π΅:

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ Arduino.hДСйствиС
bitRead(value, bit)Π§ΠΈΡ‚Π°Π΅Ρ‚ Π±ΠΈΡ‚ ΠΏΠΎΠ΄ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ bit Π² числС value
bitSet(value, bit)Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ (ставит 1) Π±ΠΈΡ‚ ΠΏΠΎΠ΄ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ bit Π² числС value
bitClear(value, bit)Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ (ставит 0) Π±ΠΈΡ‚ ΠΏΠΎΠ΄ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ bit Π² числС value
bitWrite(value, bit, bitvalue)Π‘Ρ‚Π°Π²ΠΈΡ‚ Π±ΠΈΡ‚ ΠΏΠΎΠ΄ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ bit Π² состояниС bitvalue (0 ΠΈΠ»ΠΈ 1) Π² числС value
bit(bit)Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 2 Π² стСпСни bit
Π”Ρ€ΡƒΠ³ΠΈΠ΅ встроСнныС макросы
_BV(bit)Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 2 Π² стСпСни bit
bit_is_set(value, bit)ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ (1) Π±ΠΈΡ‚Π° bit Π² числС value
bit_is_clear(value, bit)ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ (0) Π±ΠΈΡ‚Π° bit Π² числС value

Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Π±ΠΎΠ»Π΅Π΅ слоТным Π²Π΅Ρ‰Π°ΠΌ. На самом Π΄Π΅Π»Π΅ ΠΎΠ½ΠΈ максимально просты для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ просты, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ‚Π°ΠΊΡ‚. ΠŸΡ€ΠΈ частотС 16 ΠœΠ“Ρ† (Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠ»Π°Ρ‚ Arduino) ΠΎΠ΄Π½Π° опСрация Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 0.0625 микросСкунды.

Π‘ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ И

И (AND), ΠΎΠ½ΠΎ ΠΆΠ΅ β€œΠ»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ умноТСниС”, выполняСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ & ΠΈΠ»ΠΈ and ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ОсновноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ И – битовая маска. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ β€œΠ²Π·ΡΡ‚ΡŒβ€ ΠΈΠ· Π±Π°ΠΉΡ‚Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹:

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ & ΠΌΡ‹ взяли ΠΈΠ· Π±Π°ΠΉΡ‚Π° 0b11001100 Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΠΈΡ‚Ρ‹ 10000111, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ – 0b11001100, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ 0b10000100 Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ составной ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ &=

Π‘ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Π˜Π›Π˜

Π˜Π›Π˜ (OR), ΠΎΠ½ΠΎ ΠΆΠ΅ β€œΠ»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ слоТСниС”, выполняСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ | ΠΈΠ»ΠΈ or ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ОсновноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π˜Π›Π˜ – установка Π±ΠΈΡ‚Π° Π² Π±Π°ΠΉΡ‚Π΅:

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ составной ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ |=

Π’Ρ‹ ΡƒΠΆΠ΅ поняли, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½ΡƒΠΆΠ½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π»ΡŽΠ±Ρ‹ΠΌ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ способом: Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ (0b00000001 – Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π±ΠΈΡ‚), Π² дСсятичном Π²ΠΈΠ΄Π΅ (16 – Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΉ Π±ΠΈΡ‚) ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ макросов bit() ΠΈΠ»ΠΈ _BV() ( bit(7) Π΄Π°Ρ‘Ρ‚ 128 ΠΈΠ»ΠΈ 0b10000000, _BV(7) Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС)

Π‘ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ НЕ

Битовая опСрация НЕ (NOT) выполняСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ

ΠΈ просто ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π±ΠΈΡ‚:

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚:

Π‘ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Π˜Π›Π˜

Битовая опСрация ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Π˜Π›Π˜ (XOR) выполняСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ^ ΠΈΠ»ΠΈ xor ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Данная опСрация ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для инвСртирования состояния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π°:

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ взяли Π±ΠΈΡ‚ β„–7 Π² Π±Π°ΠΉΡ‚Π΅ 0b11001100 ΠΈ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ Π΅Π³ΠΎ Π² 0, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ 0b01001100, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°Π»ΠΈ.

Π‘ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг

Π‘ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚ ΠΈΠ»ΠΈ Π΄Π΅Π»ΠΈΡ‚ Π±Π°ΠΉΡ‚ Π½Π° 2 Π² стСпСни. Π”Π°, это опСрация дСлСния, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°ΡΡΡ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ‚Π°ΠΊΡ‚ процСссора! К этому ΠΌΡ‹ Π΅Ρ‰Ρ‘ вСрнёмся Π½ΠΈΠΆΠ΅. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° сдвига ΠΈ сравнитС Π΅Ρ‘ с макросами bit() ΠΈ _BV() :

Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ-Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ

Вспомним ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΏΡƒΠ½ΠΊΡ‚Π° ΠΏΡ€ΠΎ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Π˜Π›Π˜, ΠΏΡ€ΠΎ установку Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π°. Π’ΠΎΡ‚ эти Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° Π΄Π΅Π»Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅:

Как насчёт установки Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±ΠΈΡ‚ сразу?

Или ΠΏΡ€ΠΈΡ†Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΡ‚? Π’ΡƒΡ‚ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ &= ΠΈ

Π’Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ нСсколько Π±ΠΈΡ‚ сразу? ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°!

ИмСнно Ρ‚Π°ΠΊΠΈΠ΅ конструкции Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ΄Π΅ высокого уровня ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…, ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ производится Ρ€Π°Π±ΠΎΡ‚Π° с рСгистрами ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. ВСрнёмся ΠΊ устройству Ардуиновских макросов:

Π― Π΄ΡƒΠΌΠ°ΡŽ, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ излишни: макросы состоят ΠΈΠ· Ρ‚Π΅Ρ… ΠΆΠ΅ элСмСнтарных Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ сдвигов!

БыстрыС вычислСния

Как я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ – самыС быстрыС. Если трСбуСтся максимальная ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ вычислСний – ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ΄ΠΎΠ³Π½Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ β€œΡΡ‚Π΅ΠΏΠ΅Π½ΠΈ двойки”, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° компилятор Π΄Π΅Π»Π°Π΅Ρ‚ это сам, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ смотри Π² ΡƒΡ€ΠΎΠΊΠ΅ ΠΏΡ€ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π°. Рассмотрим Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: рассмотрСнныС Π²Ρ‹ΡˆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с цСлочислСнными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…!

Экономия памяти

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ памяти, пакуя Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±Π»ΠΎΠΊΠΈ. НапримСр, пСрСмСнная Ρ‚ΠΈΠΏΠ° boolean Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² памяти 8 Π±ΠΈΡ‚, хотя ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 0 ΠΈ 1. Π’ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ 8 логичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π•Ρ‰Ρ‘ интСрСсный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сТатия

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ отбросили Ρƒ красного ΠΈ синСго младшиС (ΠΏΡ€Π°Π²Ρ‹Π΅) Π±ΠΈΡ‚Ρ‹, Π² этом ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ сТатиС. Π§Π΅ΠΌ большС Π±ΠΈΡ‚ΠΎΠ² ΠΎΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ – Ρ‚Π΅ΠΌ ΠΌΠ΅Π½Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ получится β€œΡ€Π°Π·ΠΆΠ°Ρ‚ΡŒβ€ число. НапримСр сТимали число 0b10101010 (170 Π² дСсятичной) Π½Π° Ρ‚Ρ€ΠΈ Π±ΠΈΡ‚Π°, ΠΏΡ€ΠΈ сТатии ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ 0b10101000, Ρ‚.Π΅. потСряли Ρ‚Ρ€ΠΈ ΠΌΠ»Π°Π΄ΡˆΠΈΡ… Π±ΠΈΡ‚Π°, ΠΈ Π² дСсятичной ΡƒΠΆΠ΅ получится 168. Для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг ΠΈ маска, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ Π±Π΅Ρ€Ρ‘ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡΡ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ² красного, ΡˆΠ΅ΡΡ‚ΡŒ Π·Π΅Π»Ρ‘Π½ΠΎΠ³ΠΎ ΠΈ ΠΏΡΡ‚ΡŒ синСго, ΠΈ Π·Π°Π΄Π²ΠΈΠ³Π°Π΅ΠΌ Π½Π° Π½ΡƒΠΆΠ½Ρ‹Π΅ мСста Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ 16-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Всё, Ρ†Π²Π΅Ρ‚ сТат ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ. Для распаковки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ обратная опСрация: Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ маски Π½ΡƒΠΆΠ½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ ΠΈ сдвигаСм ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Π±Π°ΠΉΡ‚:

Как ΠΈ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ со свСтодиодами, ΠΌΡ‹ просто Π±Ρ€Π°Π»ΠΈ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ ( Π² этом случаС младшиС Π΄Π²Π°, 0b11 ) ΠΈ сдвигали ΠΈΡ… Π½Π° Π½ΡƒΠΆΠ½ΠΎΠ΅ расстояниС. Для распаковки Π΄Π΅Π»Π°Π΅ΠΌ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС:

И ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ наши Π±Π°ΠΉΡ‚Ρ‹. Π’Π°ΠΊΠΆΠ΅ маску ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ запись, Π·Π°Π΄Π²ΠΈΠ½ΡƒΠ² 0b11 Π½Π° Π½ΡƒΠΆΠ½ΠΎΠ΅ расстояниС:

Ну ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, прослСдив Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для сСбя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ макрос чтСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°:

Π“Π΄Π΅ x это ΠΏΠ°ΠΊΠ΅Ρ‚, Π° y – порядковый Π½ΠΎΠΌΠ΅Ρ€ Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ значСния. Π’Ρ‹Π²Π΅Π΄Π΅ΠΌ посмотрим:

β€œΠ’Ρ€ΡŽΠΊΠΈβ€ с Π±ΠΈΡ‚Π°ΠΌΠΈ

На Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… опСрациях ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ всСго интСрСсного, ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ быстро ΠΈ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΌΠ°Π»ΠΎ мСста. ΠžΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ список Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… Ρ‚Ρ€ΡŽΠΊΠΎΠ² ΠΈ Ρ…Π°ΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΈΡ… Ρ‚Π°ΠΌ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ всС с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ. Π•ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ нСбольшой сборник самых простых ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ…Π°ΠΊΠΎΠ² Π²ΠΎΡ‚ здСсь (английский). Π•Π³ΠΎ я ΠΏΠ΅Ρ€Π΅Π²Ρ‘Π», смотритС Π½ΠΈΠΆΠ΅ ΠΏΠΎΠ΄ спойлСром. Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° (ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ всС Ρ‚Ρ€ΡŽΠΊΠΈ) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ здСсь.

ΠŸΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠ° Π±ΠΈΡ‚Π°

Π¦Π΅Π»Ρ‹Π΅

Установка n Π³ΠΎ Π±ΠΈΡ‚Π°

Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ n Π³ΠΎ Π±ΠΈΡ‚Π°

Π˜Π½Π²Π΅Ρ€ΡΠΈΡ n Π³ΠΎ Π±ΠΈΡ‚Π°

ΠžΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎ блиТайшСй стСпСни Π΄Π²ΠΎΠΉΠΊΠΈ

ΠžΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ Π²Π½ΠΈΠ·

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ максимального Ρ†Π΅Π»ΠΎΠ³ΠΎ

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ минимального Ρ†Π΅Π»ΠΎΠ³ΠΎ

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ максимального long

Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 2

Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 2

Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° m ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π΄Π²ΠΎΠΉΠΊΠΈ

Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° m ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π΄Π²ΠΎΠΉΠΊΠΈ

ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ ΠΎΡ‚ дСлСния

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° равСнства

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‡Ρ‘Ρ‚Π½ΠΎΡΡ‚ΡŒ (ΠΊΡ€Π°Ρ‚Π½ΠΎΡΡ‚ΡŒ 2)

ОбмСн значСниями

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ значСния

ΠœΠ°ΠΊΡΠΈΠΌΡƒΠΌ ΠΈΠ· Π΄Π²ΡƒΡ…

ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΈΠ· Π΄Π²ΡƒΡ…

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π·Π½Π°ΠΊ

Π‘ΠΌΠ΅Π½Π° Π·Π½Π°ΠΊΠ°

Π’Π΅Ρ€Π½Ρ‘Ρ‚ 2 n

ЯвляСтся Π»ΠΈ число ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ 2

ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ ΠΎΡ‚ дСлСния Π½Π° 2 n Π½Π° m

Π‘Ρ€Π΅Π΄Π½Π΅Π΅ арифмСтичСскоС

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ m Ρ‹ΠΉ Π±ΠΈΡ‚ ΠΈΠ· n (ΠΎΡ‚ младшСго ΠΊ ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΌΡƒ)

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ m Ρ‹ΠΉ Π±ΠΈΡ‚ ΠΈΠ· n (ΠΎΡ‚ ΡΡ‚Π°Ρ€ΡˆΠ΅Π³ΠΎ ΠΊ ΠΌΠ»Π°Π΄ΡˆΠ΅ΠΌΡƒ)

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π»ΠΈ n Ρ‹ΠΉ Π±ΠΈΡ‚

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ самого ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π°

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ самого ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π°

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π°

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π°

n + 1

n – 1

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния

if (x == a) x = b; if (x == b) x = a;

ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ смСТныС Π±ΠΈΡ‚Ρ‹

Different rightmost bit of numbers m & n

Common rightmost bit of numbers m & n

ДСсятичныС Π΄Ρ€ΠΎΠ±ΠΈ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ρ…Π°ΠΊΠΈ с float ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Ардуино! Π Π°Π·Π±ΠΈΡ‚ΡŒ float Π² массив Π±ΠΈΡ‚ (unsigned uint32_t)

Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ массив Π±ΠΈΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² float

Быстрый ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ

Быстрый n Ρ‹ΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΈΠ· Ρ†Π΅Π»ΠΎΠ³ΠΎ числа

Быстрая ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ

Быстрый Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ

Быстрая экспонСнта

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ

ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр

ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр

Π˜Π½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСгистр

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ Π±ΡƒΠΊΠ²Ρ‹ Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π΅ (Π°Π½Π³Π»)

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ большой Π±ΡƒΠΊΠ²Ρ‹ Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π΅ (Π°Π½Π³Π»)

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ строчной Π±ΡƒΠΊΠ²Ρ‹ Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π΅ (Π°Π½Π³Π»)

Π”Ρ€ΡƒΠ³ΠΎΠ΅

Быстрая конвСртация Ρ†Π²Π΅Ρ‚Π° R5G5B5 Π² R8G8B8

ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ»ΠΎΠ΄ΠΈΡ‚ΡŒ скобки, Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π’ C++ ΠΎΠ½ Ρ‚Π°ΠΊΠΎΠΉ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

О Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… опСрациях

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ

О Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… опСрациях

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу Π²Π°ΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π‘ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π²Π°ΠΌ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ слоТным ΠΈ бСсполСзным, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ это совсСм Π½Π΅ Ρ‚Π°ΠΊ. Π’ этом я ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ вас ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒ.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ проводят ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ нСпосрСдствСнно Π½Π° Π±ΠΈΡ‚Π°Ρ… числа, поэтому числа Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π±ΡƒΠ΄ΡƒΡ‚ Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ систСмС счислСния.

Π― расскаТу ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…:

Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‚ΡΡ Π² дискрСтной ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»Π΅ΠΆΠ°Ρ‚ Π² основС Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° Π½ΠΈΡ… основана Π»ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ логичСских Π²Π΅Π½Ρ‚ΠΈΠ»Π΅ΠΉ β€” Π±Π°Π·ΠΎΠ²Ρ‹Ρ… элСмСнтов Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… схСм. Π’ дискрСтной ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅, для описания ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ истинности. Π’Π°Π±Π»ΠΈΡ†Ρ‹ истинности, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ каТСтся, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, поэтому я ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΈΡ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅. Π˜Ρ…, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² ΠΎΠ±ΡŠΡΡΠ½Π΅Π½ΠΈΡΡ… ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² высокоуровнСвых языков программирования.

О Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… Π²Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ:

ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Π˜Π›Π˜ (OR)

ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Π˜Π›Π˜ дСйствуСт эквивалСнтно логичСскому Π˜Π›Π˜, Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΌΡƒ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Π΅ Π±ΠΈΡ‚ΠΎΠ² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ числа. Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ разряд Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ€Π°Π²Π΅Π½ 0 Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΡ‚Π° Π² Ρ€Π°Π²Π½Ρ‹ 0. Π’ΠΎ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π²Π΅Π½ 1. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° истинности:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ

38 | 53 Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

A00100110
B00110101
A | B00110111

ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ И (AND)

ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ И β€” это Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠΌΡƒ Π˜Π›Π˜. Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ разряд Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ€Π°Π²Π΅Π½ 1 Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² Ρ€Π°Π²Π½Ρ‹ 1. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ разряды ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡ числа β€” это Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ умноТСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΡ‚ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°: 1Ρ…1 = 1, 1Ρ…0 = 0. ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠΌΡƒ И соотвСтствуСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° истинности:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ И Π½Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ 38 & 53:

A00100110
B00110101
A & B00100100

Π˜ΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Π˜Π›Π˜ (XOR)

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΌ Π˜Π›Π˜ ΠΈ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌ Π˜Π›Π˜ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для получСния 1 Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ‚ Π² ΠΏΠ°Ρ€Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ 1:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ

НапримСр, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 138^43 Π±ΡƒΠ΄Π΅Ρ‚ равно…

A10001010
B00101011
A ^ B10100001

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ^ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ значСния Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…) Π±Π΅Π· использования Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π’Π°ΠΊΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Π˜Π›Π˜ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ тСкст. Для этого Π½ΡƒΠΆΠ½ΠΎ лишь ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· всС символы, ΠΈ ^ ΠΈΡ… с символом-ΠΊΠ»ΡŽΡ‡ΠΎΠΌ. Для Π±ΠΎΠ»Π΅Π΅ слоТного ΡˆΠΈΡ„Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ строку символов:

Π˜ΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Π˜Π›Π˜ Π½Π΅ самый Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ способ ΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅ (NOT)

ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ всС Π±ΠΈΡ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ 1 станСт 0, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ

Π’ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, опСрация

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ 20310

ΠŸΡ€ΠΈ использовании ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ отрицания Π·Π½Π°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π·Π½Π°ΠΊΡƒ исходного числа (ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ числами). ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ происходит, ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ прямо сСйчас.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π—Π΄Π΅ΡΡŒ ΠΌΠ½Π΅ стоит Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ способС прСдставлСния ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ… чисСл Π² Π­Π’Πœ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ (two’s complement). НС вдаваясь Π² подробности, ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½ для облСгчСния Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… чисСл.

Π“Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ числах, записанных Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд являСтся Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ. Если ΠΎΠ½ Ρ€Π°Π²Π΅Π½ 0, Ρ‚ΠΎ число ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈ совпадаСт с прСдставлСниСм этого числа Π² прямом ΠΊΠΎΠ΄Π΅, Π° Ссли 1 β€” Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅. Π’ΠΎ Π΅ΡΡ‚ΡŒ, 10111101 β€” ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число, Π° 01000011 β€” ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π±ΠΈΡ‚Ρ‹ числа (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΏΠΎ сути, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅) ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ 1.

НапримСр, Ссли ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ 109:

A01101101

A+1

10010011

ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг Π²Π»Π΅Π²ΠΎ

ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ сдвиги Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ рассмотрСнных Ρ€Π°Π½Π΅Π΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг Π²Π»Π΅Π²ΠΎ сдвигаСт Π±ΠΈΡ‚Ρ‹ своСго ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π½Π° N количСство Π±ΠΈΡ‚ΠΎΠ² Π²Π»Π΅Π²ΠΎ, начиная с младшСго Π±ΠΈΡ‚Π°. ΠŸΡƒΡΡ‚Ρ‹Π΅ мСста послС сдвига Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ нулями. ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ это Ρ‚Π°ΠΊ:

ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг Π²ΠΏΡ€Π°Π²ΠΎ

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, >> сдвигаСт Π±ΠΈΡ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π½Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ количСство Π±ΠΈΡ‚ΠΎΠ² Π²ΠΏΡ€Π°Π²ΠΎ.

Если ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, Ρ‚ΠΎ пустыС мСста Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ нулями. Если ΠΆΠ΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом, Ρ‚ΠΎ всС пустыС мСста слСва Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ. Π­Ρ‚ΠΎ дСлаСтся для сохранСния Π·Π½Π°ΠΊΠ° Π² соотвСтствии с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΎΠ±ΡŠΡΡΠ½Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π½Π΅Π΅.

Π’Ρ‹Π²ΠΎΠ΄

Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ большС ΠΎ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… опСрациях ΠΈ Π½Π΅ Π±ΠΎΠΈΡ‚Π΅ΡΡŒ ΠΈΡ…. ΠœΠΎΠ³Ρƒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ >>1 ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π° 2. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² своСм арсСналС, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ смоТСтС Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠΈ Π² случаС надобности ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ΠΊΠ°Π²Π΅Ρ€Π·Π½Ρ‹ΠΉ вопрос Π½Π° собСсСдовании.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *