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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ. ИзданиС 3-Π΅, исправлСнноС». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 14

Автор Π‘Ρ€Π°ΠΉΠ°Π½ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½

ЗначСния Ρ‚ΠΈΠΏΠ° char - это просто ΠΌΠ°Π»Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅, ΠΈ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ свободно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² арифмСтичСских выраТСниях, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ всСвозмоТныС манипуляции с символами. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ atoi, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€ Π² Π΅Π΅ числовой эквивалСнт.

/* atoi: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ s Π² Ρ†Π΅Π»ΠΎΠ΅ */

int atoi(char s[])

{

 int i, n;

 n = 0;

 for (i = 0; s[i] β€Ί= '0' && s[i] β€Ή= '9'; ++i)

  n = 10 * n + (s[i] - '0');

 return n;

}

Как ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π² Π³Π»Π°Π²Π΅ 1, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

s[i] -'0'

Π΄Π°Π΅Ρ‚ числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ символа, хранящСгося Π² s[i], Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ значСния '0', '1' ΠΈ ΠΏΡ€. ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΡƒΡŽ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ привСдСния char ΠΊ int связан с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ lower, которая ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ символ ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ASCII, Ссли ΠΎΠ½ являСтся Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² ΡΡ‚Ρ€ΠΎΡ‡Π½ΡƒΡŽ. Если ΠΆΠ΅ символ Π½Π΅ являСтся Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ, lower Π΅Π³ΠΎ Π½Π΅ измСняСт.

/* lower: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ c Π² ΡΡ‚Ρ€ΠΎΡ‡Π½ΡƒΡŽ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ASCII */

int lower(int c)

{

 if (c β€Ί= 'A' && c β€Ή='Z')

 return c +'a'-'A';

else

 return c;

}

Π’ случаС ASCII эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистров - ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ расстояниС (Ссли ΠΈΡ… Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ числовыС значСния). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, латинский Π°Π»Ρ„Π°Π²ΠΈΡ‚ - ΠΏΠ»ΠΎΡ‚Π½Ρ‹ΠΉ, Ρ‚. Π΅. ΠΌΠ΅ΠΆΠ΄Ρƒ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ A ΠΈ Z располоТСны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΡƒΠΊΠ²Ρ‹. Для Π½Π°Π±ΠΎΡ€Π° EBCDIC послСднСС условиС Π½Π΅ выполняСтся, ΠΈ поэтому наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π² этом случаС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΡƒΠΊΠ²Ρ‹.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» β€Ήctype.hβ€Ί, описанный Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ B, опрСдСляСт сСмСйство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ символы нСзависимо ΠΎΡ‚ символьного Π½Π°Π±ΠΎΡ€Π°. НапримСр, функция tolower(c) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±ΡƒΠΊΠ²Ρƒ c Π² ΠΊΠΎΠ΄Π΅ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистра, Ссли ΠΎΠ½Π° Π±Ρ‹Π»Π° Π² ΠΊΠΎΠ΄Π΅ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистра, поэтому tolower - ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ Π·Π°ΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lower, рассмотрСнной Π²Ρ‹ΡˆΠ΅. Аналогично ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ

c β€Ί= '0' && c β€Ή= '9'

ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° isdigit(c)

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ функциями ΠΈΠ· β€Ήctype.hβ€Ί.

БущСствуСт ΠΎΠ΄Π½Π° Ρ‚ΠΎΠ½ΠΊΠΎΡΡ‚ΡŒ, ΠΊΠ°ΡΠ°ΡŽΡ‰Π°ΡΡΡ прСобразования символов Π² Ρ†Π΅Π»Ρ‹Π΅ числа: язык Π½Π΅ опрСдСляСт, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° char Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. ΠŸΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ char Π² int ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΠΎΠ³Π΄Π°- Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅? На ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… с Ρ€Π°Π·Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. На Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° char с Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΌ ΡΡ‚Π°Ρ€ΡˆΠΈΠΌ Π±ΠΈΡ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ Π² ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ (посрСдством "распространСния Π·Π½Π°ΠΊΠ°"). На Π΄Ρ€ΡƒΠ³ΠΈΡ… - ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ char Π² int осущСствляСтся Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΡƒΠ»Π΅ΠΉ слСва, ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСгда ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

ГарантируСтся, Ρ‡Ρ‚ΠΎ любой символ ΠΈΠ· стандартного Π½Π°Π±ΠΎΡ€Π° ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Ρ… символов Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом, поэтому Π² выраТСниях Ρ‚Π°ΠΊΠΈΠ΅ символы всСгда ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌΠΈ. Но ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π²ΠΎΡΡŒΠΌΠΈΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° char Π½Π° ΠΎΠ΄Π½ΠΈΡ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом, Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… - ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Для совмСстимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° char, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хранятся Π½Π΅ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, слСдуСт ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ явно ΠΊΠ°ΠΊ signed ΠΈΠ»ΠΈ unsigned.

ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π²Ρ€ΠΎΠ΄Π΅ i β€Ί j ΠΈ логичСскиС выраТСния, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΠΆΠ°Π΅ΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ amp;& ΠΈ ||, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-условиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, Ссли ΠΎΠ½ΠΎ истинно, ΠΈ 0, Ссли Π»ΠΎΠΆΠ½ΠΎ. Π’Π°ΠΊ, присваиваниС

d = c β€Ί= '0' && c β€Ή= '9'

установит d Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, Ссли c Π΅ΡΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€Π°, ΠΈ 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. Однако Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ isdigit, Π² качСствС истины ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ любоС Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ мСстах ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ if, while, for ΠΈ ΠΏΡ€. "истина" просто ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "Π½Π΅ Π½ΡƒΠ»ΡŒ".

НСявныС арифмСтичСскиС прСобразования, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ€ΠΎΠ΄Π΅ + ΠΈΠ»ΠΈ * с двумя ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌΠΈ (Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€) ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ опСрация Π½Π°Ρ‡Π½Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, "низший" Ρ‚ΠΈΠΏ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ Π΄ΠΎ "Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ". Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²Ρ‹ΡΡˆΠΈΠΉ Ρ‚ΠΈΠΏ. Π’ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ 6 прилоТСния A ΠΏΡ€Π°Π²ΠΈΠ»Π° прСобразования сформулированы Ρ‚ΠΎΡ‡Π½ΠΎ. Если ΠΆΠ΅ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½Π΅Ρ‚ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ»:

Β· Если ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚ΠΈΠΏΡƒ long double, Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ приводится ΠΊ long double.

Β· Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚ΠΈΠΏΡƒ double, Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ приводится ΠΊ double.

Β· Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚ΠΈΠΏΡƒ float, Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ приводится ΠΊ float.

Β· Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² char ΠΈ short приводятся ΠΊ int.

Β· И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² Ρ‚ΠΈΠΏΠ° long, Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ приводится ΠΊ long.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ Ρ‚ΠΈΠΏΠ° float Π½Π΅ приводятся автоматичСски ΠΊ Ρ‚ΠΈΠΏΡƒ double; Π² этом данная вСрсия языка отличаСтся ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ. Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ собранным Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ β€Ήmath.hβ€Ί, Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° вычислСниях с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ. Π’ основном float ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для экономии памяти Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах ΠΈ Π½Π΅ Ρ‚Π°ΠΊ часто - для ускорСния счСта Π½Π° Ρ‚Π΅Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Π³Π΄Π΅ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ° с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ слишком Π΄ΠΎΡ€ΠΎΠ³Π° с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния расхода Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ памяти.

ΠŸΡ€Π°Π²ΠΈΠ»Π° прСобразования ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ΡΡ с появлСниСм ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² Ρ‚ΠΈΠΏΠ° unsigned. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сравнСния Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ зависят ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² цСлочислСнных Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° int Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 16 Π±ΠΈΡ‚ΠΎΠ², Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° long - 32 Π±ΠΈΡ‚Π°. Π’ΠΎΠ³Π΄Π° -1L β€Ή 1U, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ 1U ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚ΠΈΠΏΡƒ unsigned int ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ Π΄ΠΎ Ρ‚ΠΈΠΏΠ° signed long. Но -1L β€Ί1UL, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ -1L ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ Π΄ΠΎ Ρ‚ΠΈΠΏΠ° unsigned long ΠΈ воспринимаСтся ΠΊΠ°ΠΊ большоС ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅ΡŽΡ‚ мСсто ΠΈ ΠΏΡ€ΠΈ присвоСниях: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΎΠΉ части присвоСния приводится ΠΊ Ρ‚ΠΈΠΏΡƒ Π»Π΅Π²ΠΎΠΉ части, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ являСтся Ρ‚ΠΈΠΏΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Π’ΠΈΠΏ char прСвращаСтся Π² int ΠΏΡƒΡ‚Π΅ΠΌ распространСния Π·Π½Π°ΠΊΠ° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ описанным Π²Ρ‹ΡˆΠ΅ способом.

Π’ΠΈΠΏ long int ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² short int ΠΈΠ»ΠΈ Π² значСния Ρ‚ΠΈΠΏΠ° char ΠΏΡƒΡ‚Π΅ΠΌ отбрасывания ΡΡ‚Π°Ρ€ΡˆΠΈΡ… разрядов. Π’Π°ΠΊ, Π²

int i;

char c;

i = c;

c = i;

Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ c Π½Π΅ измСнится. Π­Ρ‚ΠΎ справСдливо нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, распространяСтся Π·Π½Π°ΠΊ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ char Π² int ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Однако, Ссли ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΡΡ‚ΡŒ присваиваний, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° потСря ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Если x ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚ΠΈΠΏΡƒ float, Π° i - Ρ‚ΠΈΠΏΡƒ int, Ρ‚ΠΎ ΠΈ x=i, ΠΈ i=z Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ прСобразования, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ float Π² int сопровоТдаСтся отбрасываниСм Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части. Если double пСрСводится Π²ΠΎ float, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π»ΠΈΠ±ΠΎ округляСтся, Π»ΠΈΠ±ΠΎ обрСзаСтся; это зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°. ΠŸΡ€ΠΈ отсутствии ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚ΠΈΠ½Π° char ΠΈ short пСрСводятся Π² int, a float - Π² double. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ объявляли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚ΠΈΠΏΠ° int ΠΈΠ»ΠΈ double Π΄Π°ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π² Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ использовали Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚ΠΈΠΏΠ° char ΠΈΠ»ΠΈ float.

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, для любого выраТСния ΠΌΠΎΠΆΠ½ΠΎ явно ("насильно") ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Π²ΠΈΠ΄Π°

(имя-Ρ‚ΠΈΠΏΠ°) Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π² скобках Ρ‚ΠΈΠΏΡƒ ΠΏΠΎ пСрСчислСнным Π²Ρ‹ΡˆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ. Бмысл ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ привСдСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС Ρ‚Π°ΠΊ: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π±Ρ‹ присваиваСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈ эта пСрСмСнная ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСсто всСй конструкции. НапримСр, библиотСчная функция sqrt рассчитана Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° double ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ Ρ‡Π΅ΠΏΡƒΡ…Ρƒ, Ссли Π΅ΠΉ ΠΏΠΎΠ΄ΡΡƒΠ½ΡƒΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ (sqrt описана Π²). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли n ΠΈΠΌΠ΅Π΅Ρ‚ цСлочислСнный Ρ‚ΠΈΠΏ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

sqrt((double) n)

ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½ΠΎ Π² double. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ опСрация привСдСния всСго лишь Π²Ρ‹Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½ΠΎ саму ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ n Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚. ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° привСдСния ΡΡ‚ΠΎΠ»ΡŒ ΠΆΠ΅ высок, ΠΊΠ°ΠΊ ΠΈ любого ΡƒΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Ρ‡Ρ‚ΠΎ зафиксировано Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠΉ Π² ΠΊΠΎΠ½Ρ†Π΅ этой Π³Π»Π°Π²Ρ‹.

Π’ Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ описаны Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΈ слСдуСт Π±Ρ‹Ρ‚ΡŒ, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ выполняСтся автоматичСски. Π’Π°ΠΊ, ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sqrt:

double sqrt(double);

ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ sqrt Π² присваивании

root2 = sqrt(2);

Ρ†Π΅Π»ΠΎΠ΅ 2 Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½ΠΎ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ double 2.0 автоматичСски Π±Π΅Π· явного указания ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ привСдСния.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ привСдСния ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π° пСрСносимой вСрсии Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° псСвдослучайных чисСл ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ "сСмя". И Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΈ функция входят Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.