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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования C++. ΠŸΡΡ‚ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 13

Автор Π‘Ρ‚Π΅Π½Π»ΠΈ Π›ΠΈΠΏΠΏΠΌΠ°Π½

Π’ΠΈΠΏΡ‹ int, short, long ΠΈ long long ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ части unsigned ΠΊ названию Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ unsigned long. Π’ΠΈΠΏ unsigned int ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сокращСн Π΄ΠΎ unsigned.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… цСлочислСнных Ρ‚ΠΈΠΏΠΎΠ², ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ разновидности Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° char: char, signed char ΠΈ unsigned char. Π’ частности, Ρ‚ΠΈΠΏ char отличаСтся ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° signed char. На Ρ‚Ρ€ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° прСдставлСния: Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Ρ‚ΠΈΠΏ char ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ· этих прСдставлСний. КакоС ΠΈΠΌΠ΅Π½Π½ΠΎ, зависит ΠΎΡ‚ компилятора.

Π’ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ всС Π±ΠΈΡ‚Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НапримСр, 8-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ unsigned char ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ значСния ΠΎΡ‚ 0 Π΄ΠΎ 255 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ Π½Π΅ опрСдСляСт прСдставлСниС Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Π½ΠΎ ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ€ΠΎΠ²Π½Ρƒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, 8-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ signed char Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π² состоянии ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ значСния ΠΎΡ‚ -127 Π΄ΠΎ 127; Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных машин ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ прСдставлСния, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ значСния ΠΎΡ‚ -128 Π΄ΠΎ 127.

Π‘ΠΎΠ²Π΅Ρ‚. Какой Ρ‚ΠΈΠΏ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Подобно языку Π‘, язык Π‘++ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎ нСобходимости ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠ³Π»Π° ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ нСпосрСдствСнно ΠΊ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ срСдствам. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ арифмСтичСскиС Ρ‚ΠΈΠΏΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ особСнностям Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… срСдств. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ количСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… арифмСтичСских Ρ‚ΠΈΠΏΠΎΠ² Π² языкС Π‘++ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ программистов, ТСлая ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этих слоТностСй, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ количСство фактичСски ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠΎΠ². НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ нСсколько эмпиричСских ΠΏΡ€Π°Π²ΠΈΠ», способных ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ значСния Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΈΠΏ int для цСлочислСнной Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ. Π’ΠΈΠΏ short ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ слишком ΠΌΠ°Π», Π° Ρ‚ΠΈΠΏ long Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ ΠΈ Ρ‚ΠΈΠΏ int. Если ваши значСния большС, Ρ‡Π΅ΠΌ минимально Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏ int, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΈΠΏ long long.

β€’ ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ char ΠΈ Ρ‚ΠΈΠΏ bool Π² арифмСтичСских выраТСниях. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для хранСния символов ΠΈ логичСских Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ВычислСния с использованиСм Ρ‚ΠΈΠΏΠ° char особСнно ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π° ΠΎΠ΄Π½ΠΈΡ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… ΠΎΠ½ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ, Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ. Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ малСнькоС Ρ†Π΅Π»ΠΎΠ΅ число, явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏ ΠΊΠ°ΠΊ signed char ΠΈΠ»ΠΈ unsigned char.

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΈΠΏ double для вычислСний с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. Π£ Ρ‚ΠΈΠΏΠ° float ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ нСдостаточно точности, Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π² Π·Π°Ρ‚Ρ€Π°Ρ‚Π°Ρ… Π½Π° вычислСния с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹. ЀактичСски Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ быстрСС, Ρ‡Π΅ΠΌ с ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ. Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, прСдоставляСмая Ρ‚ΠΈΠΏΠΎΠΌ long double, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½Π° ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Π°, Π° Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ выполнСния.

УпраТнСния Ρ€Π°Π·Π΄Π΅Π»Π° 2.1.1

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2.1. ΠšΠ°ΠΊΠΎΠ²Ρ‹ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ int, long, long long ΠΈ short? ΠœΠ΅ΠΆΠ΄Ρƒ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ? ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ float ΠΈ double?

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2.2. КакиС Ρ‚ΠΈΠΏΡ‹ Π²Ρ‹ использовали Π±Ρ‹ для коэффициСнта, основной суммы ΠΈ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΏΡ€ΠΈ вычислСнии Π²Ρ‹ΠΏΠ»Π°Ρ‚ ΠΏΠΎ Π·Π°ΠΊΠ»Π°Π΄Π½ΠΎΠΉ? ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Ρ‚ΠΈΠΏΠΎΠ²?

2.1.2. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²

Π’ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° опрСдСляСт Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ, ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ с Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ. Π‘Ρ€Π΅Π΄ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… мноТСством Ρ‚ΠΈΠΏΠΎΠ², Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ (convert) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ, связанный Ρ‚ΠΈΠΏ.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² происходит автоматичСски, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΌ, Π³Π΄Π΅ оТидаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π‘ΠΎΠ»Π΅Π΅ подробная информация ΠΎ прСобразованиях ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 4.11, Π° ΠΏΠΎΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ присвоСнии значСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

Когда Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ арифмСтичСского Ρ‚ΠΈΠΏΠ° присваиваСтся Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ

bool b = 42;          // b содСрТит true

int i = b;            // i содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1

i = 3.14;             // i содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3

double pi = i;        // pi содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3.0

unsigned char с = -1; // ΠΏΡ€ΠΈ 8-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΌ char содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 255

signed char c2 = 256; // ΠΏΡ€ΠΈ 8-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΌ char Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ c2 Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ

происходящСС зависит ΠΎΡ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ‚ΠΈΠΏΠΎΠΌ.

β€’ ΠšΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π΅ логичСских арифмСтичСских Ρ‚ΠΈΠΏΠΎΠ² присваиваСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚ΠΈΠΏΠ° bool, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ false, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся 0, Π° Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС β€” true.

β€’ ΠšΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° bool присваиваСтся ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… арифмСтичСских Ρ‚ΠΈΠΏΠΎΠ², Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, Ссли логичСским Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π±Ρ‹Π»ΠΎ true, ΠΈ 0, Ссли это Π±Ρ‹Π»ΠΎ false.

β€’ ΠšΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ присваиваСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ цСлочислСнного Ρ‚ΠΈΠΏΠ°, ΠΎΠ½ΠΎ усСкаСтся Π΄ΠΎ части ΠΏΠ΅Ρ€Π΅Π΄ дСсятичной Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ.

β€’ ΠšΠΎΠ³Π΄Π° цСлочислСнноС (ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ присваиваСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚ΠΈΠΏΠ° с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, дробная Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π²Π½Π° Π½ΡƒΠ»ΡŽ. Если Ρƒ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа большС Π±ΠΈΡ‚ΠΎΠ², Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, Ρ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ потСряна.

β€’ Π•сли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ· Π΅Π³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ остаток ΠΎΡ‚ дСлСния ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ способСн ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏ назначСния. НапримСр, 8-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ unsigned char способСн ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ значСния ΠΎΡ‚ 0 Π΄ΠΎ 255 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Если ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π½Π΅ этого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Ρ‚ΠΎ компилятор присвоит Π΅ΠΌΡƒ остаток ΠΎΡ‚ дСлСния ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 256. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ присвоСния значСния -1 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ 8-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° unsigned char Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 255.

β€’ Π•сли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ· Π΅Π³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ оказываСтся Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π‘ΠΎΠ²Π΅Ρ‚. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈ машинно-зависимого повСдСния

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ повСдСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ компилятор Π½Π΅ обязан (Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ Π½Π΅ Π² состоянии) ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ. Π”Π°ΠΆΠ΅ Ссли ΠΊΠΎΠ΄ компилируСтся, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ всС Ρ€Π°Π²Π½ΠΎ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Π°.

К соТалСнию, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… компиляторах ΠΈ ΠΏΡ€ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ…, ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²ΠΏΠΎΠ»Π½Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Π½Π΅ проявляя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Но Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, откомпилированная Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ компиляторС ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ вСрсии Π΄Π°Π½Π½ΠΎΠ³ΠΎ компилятора, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. НСт Π΄Π°ΠΆΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ, Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ работая с ΠΎΠ΄Π½ΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ.

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ примСняСт эти прСобразования Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ использовании Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ арифмСтичСского Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΌ, Π³Π΄Π΅ оТидаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ арифмСтичСского Ρ‚ΠΈΠΏΠ°. НапримСр, ΠΏΡ€ΠΈ использовании значСния, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΎΡ‚ логичСского Π² условии, арифмСтичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прСобразуСтся Π² Ρ‚ΠΈΠΏ bool Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ присвоСнии арифмСтичСского значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° bool:

int i = 42;

if (i) // условиС рассматриваСтся ΠΊΠ°ΠΊ истинноС

 i = 0;

ΠŸΡ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ 0 условиС Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠΆΠ½Ρ‹ΠΌ, Π° ΠΏΡ€ΠΈ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… (ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ нуля) β€” истинным.

К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈ использовании значСния Ρ‚ΠΈΠΏΠ° bool Π² арифмСтичСском Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ½ΠΎ всСгда прСобразуСтся Π² 0 ΠΈΠ»ΠΈ 1. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ логичСского значСния Π² арифмСтичСском Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ являСтся Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ.

ВыраТСния, Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹

Π₯отя ΠΌΡ‹ сами вряд Π»ΠΈ ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ присвоим ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ (ΠΏΡ€ΠΈΡ‡Π΅ΠΌ слишком Π»Π΅Π³ΠΊΠΎ) Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдСлаСт это нСявно. НапримСр, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ значСния Ρ‚ΠΈΠΏΠ° unsigned ΠΈ int Π² арифмСтичСском Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, значСния Ρ‚ΠΈΠΏΠ° int ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² Ρ‚ΠΈΠΏ unsigned. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ значСния Ρ‚ΠΈΠΏΠ° int Π² unsigned выполняСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ способом, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ присвоСнии: