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

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

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

unsigned u = 10;

int i = -42;

std::cout << i + i << std::endl; // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ -84

std::cout << u + i << std::endl; // ΠΏΡ€ΠΈ 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΌ int,

                                 // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 4294967264

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ осущСствлСно слоТСниС, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -42 Ρ‚ΠΈΠΏΠ° int прСобразуСтся Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° unsigned. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа Π² Ρ‚ΠΈΠΏ unsigned происходит Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ это ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚ΠΈΠΏΠ° unsigned. ΠŸΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ "ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ значСния" (wrap around), ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ описано Π²Ρ‹ΡˆΠ΅.

ΠŸΡ€ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠΈ значСния ΠΈΠ· Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΎΠ±Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ, слСдуСт Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ окаТСтся ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ:

unsigned u1 = 42, u2 = 10;

std::cout << u1 - u2 << std::endl; // ok: Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ 32

std::cout << u2 - u1 << std::endl; // ok: Π½ΠΎ с ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ значСния

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мСньшС нуля, влияСт Π½Π° способы написания Ρ†ΠΈΠΊΠ»ΠΎΠ². НапримСр, Π² упраТнСниях Ρ€Π°Π·Π΄Π΅Π»Π° 1.4.1 (стр. 39) слСдовало Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ использовал ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° для Π²Ρ‹Π²ΠΎΠ΄Π° чисСл ΠΎΡ‚ 10 Π΄ΠΎ 0. Написанный Π²Π°ΠΌΠΈ Ρ†ΠΈΠΊΠ», вСроятно, выглядСл ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

for (int i = 10; i >= 0; --i)

 std::cout << i << std::endl;

Казалось Π±Ρ‹, этот Ρ†ΠΈΠΊΠ» ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΈΠΏ unsigned. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², ΠΌΡ‹ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа. Однако это простоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ закончится:

// ΠžΠ¨Π˜Π‘ΠšΠ: u Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ смоТСт ΡΡ‚Π°Ρ‚ΡŒ мСньшС 0; условиС

// навсСгда останСтся истинным

for (unsigned u = 10; u >= 0; --u)

 std::cout << u << std::endl;

Рассмотрим, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° u станСт Ρ€Π°Π²Π½ΠΎ 0. На этой ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ отобраТаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, Π° Π·Π°Ρ‚Π΅ΠΌ выполняСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° for. Π­Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, --u, Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ 1 ΠΈΠ· u. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, -1, нСдопустим для Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Как ΠΈ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ допустимых, это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ Π² Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ 32-разрядном Ρ‚ΠΈΠΏΠ΅ int Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выраТСния --u ΠΏΡ€ΠΈ u Ρ€Π°Π²Π½ΠΎΠΌ 0 составит 4294967295.

Π˜ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°ΠΌΠ΅Π½ΠΈΠ² Ρ†ΠΈΠΊΠ» for Ρ†ΠΈΠΊΠ»ΠΎΠΌ while, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ послСдний осущСствляСт Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π΅ΠΆΠ΄Π΅ (Π° Π½Π΅ послС) отобраТСния значСния:

unsigned u = 11; // Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» с элСмСнта Π½Π° ΠΎΠ΄ΠΈΠ½ большС

                 // ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ

while (u > 0) {

 --u; // сначала Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ послСдняя итСрация ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠ»Π° 0

 std::cout << u << std::endl;

}

Π¦ΠΈΠΊΠ» начинаСтся с Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° значСния ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ»Π°. Π’ Π½Π°Ρ‡Π°Π»Π΅ послСднСй ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ пСрСмСнная u Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, Π° послС Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΌΡ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0. ΠŸΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ условия Ρ†ΠΈΠΊΠ»Π° while Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ u Π±ΡƒΠ΄Π΅Ρ‚ 0, ΠΈ Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ осущСствляСтся сначала, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ u слСдуСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ большС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ значСния. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π±Ρ‹Π»ΠΎ 10, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ u ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 11.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! НС ΡΠΌΠ΅ΡˆΠΈΠ²Π°ΠΉΡ‚Π΅ Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹

ВыраТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΌΠ΅ΡˆΠ°Π½Ρ‹ Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ оказываСтся Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ. Π’Π°ΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ значСния автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅. НапримСр, Π² Ρ‚Π°ΠΊΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠ°ΠΊ a * b, Ссли Π° содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1, a b Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 ΠΈ ΠΎΠ±Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ int, оТидаСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ -1. Но Ссли пСрСмСнная Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int, Π° пСрСмСнная b β€” Ρ‚ΠΈΠΏ unsigned, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого выраТСния Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ количСства Π±ΠΈΡ‚ΠΎΠ², Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… Ρ‚ΠΈΠΏΠΎΠΌ int Π½Π° Π΄Π°Π½Π½ΠΎΠΉ машинС. На нашСй машинС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этого выраТСния оказалось 4294967295.

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

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2.3. Каков Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?

unsigned u = 10, u2 = 42;

std::cout << u2 - u << std::endl;

std::cout << u - u2 << std::endl;

int i = 10, i2 = 42;

std::cout << i2 - i << std::endl;

std::cout << i - i2 << std::endl;

std::cout << i - u << std::endl;

std::cout << u - i << std::endl;

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2.4. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ². ΠŸΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‚Π²Π΅Ρ‚Π°Ρ… ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ этот Ρ€Π°Π·Π΄Π΅Π» Π΅Ρ‰Π΅ Ρ€Π°Π·.

2.1.3. Π›ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹

Π’Π°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ 42, Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ называСтся Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ (literal), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ самоочСвидно. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ, опрСдСляСмый Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

ЦСлочислСнныС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой

ЦСлочислСнный Π»ΠΈΡ‚Π΅Ρ€Π°Π» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² дСсятичной, Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅. ЦСлочислСнныС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с нуля (0), ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅, Π° Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с 0x ΠΈΠ»ΠΈ 0X β€” ΠΊΠ°ΠΊ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅. НапримСр, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 20 ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… способов.

20   // дСсятичная Ρ„ΠΎΡ€ΠΌΠ°

024  // Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ°

0x14 // ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ°

Π’ΠΈΠΏ цСлочислСнного Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° зависит ΠΎΡ‚ Π΅Π³ΠΎ значСния ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ дСсятичныС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ, Π° Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. Для дСсятичного Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° принимаСтся наимСньший Ρ‚ΠΈΠΏ, int, long, ΠΈΠ»ΠΈ long long, подходящий для Π΅Π³ΠΎ значСния (Ρ‚.Π΅. ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ подходящий Π² этом спискС). Для Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² принимаСтся наимСньший Ρ‚ΠΈΠΏ, int, unsigned int, long, unsigned long, long long ΠΈΠ»ΠΈ unsigned long long, подходящий для значСния Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°. НС слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Π», Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слишком Π²Π΅Π»ΠΈΠΊΠΎ для наибольшСго ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°. НСт Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² Ρ‚ΠΈΠΏΠ° short. Как ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π² Ρ‚Π°Π±Π». 2.2, значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ суффикса.

Π₯отя цСлочислСнныС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, с тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ дСсятичного Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом. Если Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ, выглядящСС ΠΊΠ°ΠΊ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ дСсятичный Π»ΠΈΡ‚Π΅Ρ€Π°Π», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -42, Ρ‚ΠΎ Π·Π½Π°ΠΊ "минус" Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°. Π—Π½Π°ΠΊ "минус" β€” это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π½Π°ΠΊ своСго ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° (Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°).

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

3.14159 3.14159Π•0 0. 0e0 .001

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ double. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ прСдставлСнныС Π² Ρ‚Π°Π±Π». 2.2 суффиксы, Ρ‚ΠΈΠΏ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ.

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹

Π‘ΠΈΠΌΠ²ΠΎΠ», Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, являСтся Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ Ρ‚ΠΈΠΏΠ° char. НСсколько символов, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² ΠΏΠ°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ строковым Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ:

'a'            // ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π»

"Hello World!" // строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π»

Π’ΠΈΠΏΠΎΠΌ строкового Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° являСтся массив константных символов. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ обсуТдаСтся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 3.5.4. К ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ строковому Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρƒ компилятор добавляСт Π½ΡƒΠ»Π΅Π²ΠΎΠΉ символ (null character) ('\0'). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° строкового Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ большС Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. НапримСр, Π»ΠΈΡ‚Π΅Ρ€Π°Π» 'A' прСдставляСт ΠΎΠ΄ΠΈΠ½ символ А, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π» "А" прСдставляСт массив ΠΈΠ· Π΄Π²ΡƒΡ… символов, символа А ΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ символа.

Π”Π²Π° строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, табуляциСй ΠΈΠ»ΠΈ символом Π½ΠΎΠ²ΠΎΠΉ строки, ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π». Π’Π°ΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ слишком Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ тСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ строкС.

// многострочный Π»ΠΈΡ‚Π΅Ρ€Π°Π»

std::cout << "a really, really long string literal "

             "that spans two lines" << std::endl;

Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Π£ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… символов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ символ ΠΈΠ»ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ символ, Π½Π΅Ρ‚ Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎ изобраТСния. Π’Π°ΠΊΠΈΠ΅ символы Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ (nonprintable character). Π”Ρ€ΡƒΠ³ΠΈΠ΅ символы (ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ ΠΈ ΠΏΠ°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π²ΠΎΠΏΡ€ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ ΠΈ наклонная Ρ‡Π΅Ρ€Ρ‚Π° Π²Π»Π΅Π²ΠΎ) ΠΈΠΌΠ΅ΡŽΡ‚ Π² языкС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих символов нСпосрСдствСнно. Для ΠΈΡ… прСдставлСния ΠΊΠ°ΠΊ символов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (escape sequence), Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π°ΡΡΡ с символа Π½Π°ΠΊΠ»ΠΎΠ½Π½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚Ρ‹ Π²Π»Π΅Π²ΠΎ.