Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«19 смСртных Π³Ρ€Π΅Ρ…ΠΎΠ², ΡƒΠ³Ρ€ΠΎΠΆΠ°ΡŽΡ‰ΠΈΡ… бСзопасности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 11

Автор Дэвид Π›Π΅Π±Π»Π°Π½ΠΊ

}

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π° + b ΠΎΡ‚ int ΠΊ byte Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС, Π³Π΄Π΅ вызываСтся Convert.ToByte, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ Π±Ρ‹ ΠΈ Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова checked, Π½ΠΎ Π΅Π³ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΅Ρ‰Π΅ ΠΈ ΠΏΡ€ΠΈ вычислСнии Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Console.Write(). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ допускаСтся Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ, Ρ‚ΠΎ имССтся Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово unchecked, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

Π‘Π»ΠΎΠ²Π° checked ΠΈ unchecked ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контроля Π² ΠΎΠ΄Π½ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ:

...

checked (с = (byte) (Ь + а));

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³Π° /checked компилятора. Если этот Ρ„Π»Π°Π³ присутствуСт, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ явно ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ словом unchecked участки ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ прСдлоТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ допустимо.

Π“Ρ€Π΅Ρ…ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ Visual Basic ΠΈ Visual Basic .NET

Visual Basic рСгулярно ΠΏΡ€Π΅Ρ‚Π΅Ρ€ΠΏΠ΅Π²Π°Π΅Ρ‚ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ Visual Basic 6.0 ΠΊ Visual Basic .NET стал самым Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ шагом со Π²Ρ€Π΅ΠΌΠ΅Π½ ввСдСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ориСнтированности Π² Visual Basic 3.0. Одно ΠΈΠ· самых Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ связано с цСлочислСнными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ (см. Ρ‚Π°Π±Π». 3.1).

Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, ΠΈ Visual Basic 6.0, ΠΈ Visual Basic .NET Π½Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ ΡƒΠ³Ρ€ΠΎΠ·Π΅ исполнСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° из–за пСрСполнСния Ρ†Π΅Π»Ρ‹Ρ… чисСл. Π’ Visual Basic 6.0 гСнСрируСтся ошибка, Ссли ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ какого–либо ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСобразования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ CInt(), Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π’ Visual Basic .NET Π² этом случаС возбуТдаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° System.OverflowException. Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ‚Π°Π±Π». 3.1, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Visual Basic .NET ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊΠΎ всСм цСлочислСнным Ρ‚ΠΈΠΏΠ°ΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π² каркасС .NET Framework.

Π’Π°Π±Π»ΠΈΡ†Π° 3.1. ЦСлочислСнныС Ρ‚ΠΈΠΏΡ‹, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Visual Basic 6.0 ΠΈ Visual Basic .NET

Π₯отя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² самом языкС Visual Basic, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΈ нСуязвимы для пСрСполнСния Ρ†Π΅Π»ΠΎΠ³ΠΎ, Π½ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Win32 API ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² 32–разрядныС Ρ†Π΅Π»Ρ‹Π΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ° (DWORD). Если ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ систСмному Π²Ρ‹Π·ΠΎΠ²Ρƒ 32–разрядноС Ρ†Π΅Π»ΠΎΠ΅ со Π·Π½Π°ΠΊΠΎΠΌ, Ρ‚ΠΎ Π² ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число. Аналогично Π²ΠΏΠΎΠ»Π½Π΅ допустимо Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ 2 – 8046, Π½Π°Π΄ числами со Π·Π½Π°ΠΊΠΎΠΌ, Π½ΠΎ Ρ‡Ρ‚ΠΎ, Ссли ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² качСствС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² Ρ‚Π°ΠΊΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅? Если систСмный Π²Ρ‹Π·ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹ выполняСтС манипуляции Π½Π°Π΄ этим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ, прямо ΠΈΠ»ΠΈ косвСнно (послС Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… вычислСний) ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΈ напослСдок ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ΡΡŒ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ систСмным Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² ΡƒΠ³Ρ€ΠΎΠΆΠ°Π΅ΠΌΠΎΠΉ ситуации. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΎΡ‚ Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… чисСл ΠΊ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Ρ‡Ρ€Π΅Π²Π°Ρ‚Ρ‹ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ. Π”Π°ΠΆΠ΅ Ссли ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ исполнСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ станут ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΠΎΡ‚ΠΊΠ°Π·Π° ΠΎΡ‚ обслуТивания. ΠΠ΅Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ приносит Π΄ΠΎΡ…ΠΎΠ΄ΠΎΠ² Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΡƒ.

Π“Ρ€Π΅Ρ…ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ Java

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Visual Basic ΠΈ Π‘#, Π² язык Java Π½Π΅ встроСна Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ. Π’ΠΎΡ‚ Ρ†ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· спСцификации языка Β«Java Language Specification*, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠΉ ΠΏΠΎ адрСсу http://java.sun.com/docs/books/jls/second_edition/html/typeValues.doc.html#9151:

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ встроСнных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Ρ†Π΅Π»Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ потСря значимости Π½Π΅ ΠΈΠ½Π΄ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. ЕдинствСнныС арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π±ΡƒΠ΄ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (Β§11), β€“ это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ цСлочислСнного дСлСния / (Β§15.17.2) ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ вычислСния остатка % (Β§15.17.3). Они Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ArithmeticException, Ссли ΠΏΡ€Π°Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Visual Basic, Java ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ лишь подмноТСство всСго Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° цСлочислСнных Ρ‚ΠΈΠΏΠΎΠ². Π₯отя 64–разрядныС Ρ†Π΅Π»Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ, Π½ΠΎ СдинствСнным Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ являСтся char, ΠΈ ΠΎΠ½ прСдставляСтся Π² Π²ΠΈΠ΄Π΅ 16–разрядного значСния Π±Π΅Π· Π·Π½Π°ΠΊΠ°.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Java Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° пСрСполнСния становится нСпростым Π΄Π΅Π»ΠΎΠΌ, ΠΈ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с C/C++ удаСтся лишь ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½ΠΈΠΉ, связанных со ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΌΠΈ опСрациями Π½Π°Π΄ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ.

Π“Ρ€Π΅Ρ…ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ Perl

По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π΄Π²Π° Π°Π²Ρ‚ΠΎΡ€Π° этой ΠΊΠ½ΠΈΠ³ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ горячими сторонниками Perl. Но, нСсмотря Π½Π° это, слСдуСт ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° с Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Perl странно. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точности, Π½ΠΎ тСстированиС позволяСт Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:...

$h = 4294967295;

$i = 0xffffffff;

$k = 0x80000000;

print "$h = 4294967295 – $h + 1 = ".($h + 1)."\n";

print "$i = 0xffffffff – $i + 1 = ".($i + 1)."\n";

printf("\nΠ˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ printf со спСцификатором %%d\n");

printf("\\$i = %d, \$i + 1 = %d\n\n", $i, $i + 1);

printf("\nВСстируСтся Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹ΠΉ случай дСлСния\n");

printf("0x80000000/-1 = %d\n", $k/-1);

print "0x80000000/-1 = ".($k/-1)."\n";

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ пСчатаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

...

[e:\projects\19_sins\perl foo.pl

4294967295 = 4294967295 – 4294967295 + 1 = 4294967296

4294967295 = 0xffffffff – 4294967295 + 1 = 4294967296

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ printf со спСцификатором %d

$i = -1, $i + 1 = -1

ВСстируСтся Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹ΠΉ случай дСлСния

0x80000000/-1 = -2147483648

0x80000000/-1 = -2147483648

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выглядит странно, особСнно ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ printf с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠΉ строкой (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print). ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Π² Π³Π»Π°Π·Π° бросаСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ°, Π½ΠΎ послС прибавлСния ΠΊ Π½Π΅ΠΌΡƒ 1 ΠΎΠ½Π° Π»ΠΈΠ±ΠΎ увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, Π»ΠΈΠ±ΠΎ – Ссли ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ %d – Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ измСняСтся. Π—Π°Π³Π²ΠΎΠ·Π΄ΠΊΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π²Ρ‹ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ числами с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, Π° спСцификатор %d заставляСт Perl ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ double Π² int. Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ пСрСполнСния Π½Π΅Ρ‚, Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² создаСтся Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

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

...

print (5/4)."\n";

1.25

Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Perl Π²Π΅Π΄Π΅Ρ‚ сСбя прСдсказуСмо ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½ΠΎ. Но Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π΄Π΅Π»ΠΎ Π½Π΅ с Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами, Π° с числами с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, β€“ Π° это Β«Π΄Π²Π΅ большиС Ρ€Π°Π·Π½ΠΈΡ†Ρ‹Β».

Π“Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ

Π›ΡŽΠ±ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ производятся арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ΠΎ этому Π³Ρ€Π΅Ρ…Ρƒ, особСнно ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ провСряСтся. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ Π½Π° вычислСниС индСксов массивов ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² выдСляСмых Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° C/C++.

ВыявлСниС ошибки Π½Π° этапС Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π°

ΠŸΡ€ΠΈ написании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° языках C/C++ Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ самоС ΠΏΡ€ΠΈΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пСрСполнСния Ρ†Π΅Π»ΠΎΠ³ΠΎ числа. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ осознали Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈ прямых манипуляциях с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π°Ρ‚Π°ΠΊΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π°Ρ‚Π΅ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… эти ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ стоят Π‘# ΠΈ Java. ΠŸΡ€ΡΠΌΡ‹Π΅ манипуляции с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² этих языках Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹, Π½ΠΎ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ всС ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ для Π‘ ΠΈ Π‘++.

Ко всСм языкам относится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: провСряйтС Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ каким–либо ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ! Π’ Web–сСрвСрах Microsoft IIS 4.0 ΠΈ 5.0 ΠΎΡ‡Π΅Π½ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Π°Ρ ошибка ΠΈΠΌΠ΅Π»Π° мСсто из–за Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ программист сначала ΠΏΡ€ΠΈΠ±Π°Π²ΠΈΠ» ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ 1, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ», Π½Π΅ оказался Π»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ слишком большим. ΠŸΡ€ΠΈ Ρ‚Π΅Ρ… Ρ‚ΠΈΠΏΠ°Ρ…, Ρ‡Ρ‚ΠΎ ΠΎΠ½ использовал, 64Πšβ€“1 + 1 оказалось Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ! На ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·Π²Π΅Ρ‰Π΅Π½ΠΈΠ΅ Π΅ΡΡ‚ΡŒ ссылка Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π”Ρ€ΡƒΠ³ΠΈΠ΅ рСсурсы».

C/C++

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ всС мСста, Π³Π΄Π΅ выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π‘Π°ΠΌΠΎΠ΅ опасноС – это Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ°, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ вычисляСтся. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ этом Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ. Π”Π°Π»Π΅Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Автор как–то встрСтил ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

...

THING* AllocThings(int a, int b, int c, int d)

{

int bufsize;

THING* ptr;

bufsize = IntegerOverflowsRUs(a, b, c, d);

ptr = (THING*)malloc(bufsize);

return ptr;

}

Ошибка ΡΠΊΡ€Ρ‹Π²Π°Π»Π°ΡΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π΅ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π°, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π½Π°ΠΉΡ‚ΠΈ Π΅Π΅ мСшали Π·Π°Π³Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ говорящиС Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдставлСны Ρ‚ΠΈΠΏΠΎΠΌ signed int). Если Ρƒ вас Π΅ΡΡ‚ΡŒ врСмя Π½Π° Π΄ΠΎΡΠΊΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·, прослСдитС порядок Π²Ρ‹Π·ΠΎΠ²Π° всСх Π²Π°ΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΌ функциям ΠΈΠ»ΠΈ систСмным Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ. И напослСдок выяснитС, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°Π»ΠΈΡΡŒ манипуляциям? ΠšΡ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹: Π²Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ?

По мнСнию Π°Π²Ρ‚ΠΎΡ€Π° языка Perl, Π²Π΅Π»ΠΈΡ‡Π°ΠΉΡˆΠΈΠΌ достоинством программиста являСтся лСнь! Π’Π°ΠΊ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΉΠ΄Π΅ΠΌ простым ΠΏΡƒΡ‚Π΅ΠΌ – заставим ΠΏΠΎΡ‚Ρ€ΡƒΠ΄ΠΈΡ‚ΡŒΡΡ компилятор. Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ диагностики /W4 (для Visual Π‘++) или–Wall либо–Wsign–compare (для gcc) – ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ мСст, Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами. ΠžΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° всС прСдупрСТдСния, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ Ρ†Π΅Π»Ρ‹Ρ… чисСл, особСнно Π½Π° Ρ‚Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… говорится ΠΎ сравнСнии Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π²Π΅Π»ΠΈΡ‡ΠΈΠ½, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ± усСчСнии.