Скачиваний:
67
Добавлен:
24.03.2015
Размер:
169.98 Кб
Скачать

4.4. Выражение с символьными операндами

Если символьное значение (символ или переменная типа char) используется в арифметическом выражении, то С# автоматически выполняет его преобразование из типа char в числовое значение его кода. То же справедливо и в случае, когда в выражении с арифметическими операциями участвуют несколько символьных переменных или констант.

В качестве иллюстрации сказанного рассмотрим следующую программу:

// 04_03.cs - выражения с символьными операндами

static void Main()

{

char c = 'c', h = '\u0068', a = '\x61', r = '\u0072';

Console.WriteLine("" + c + h + a + r);

Console.WriteLine(c + h + a + r);

}

Результат выполнения программы:

char

414

В программе символьные переменные с (десятичный код 99), h (десятичный код 104), а (десятичный код 97), г (десятичный код 114), представляют, соответственно, символы 'с', 'h', 'а', 'r'. При первом обращении к методу WriteLine() знак + играет роль операции конкатенации, аргумент (выражение) ""+c+h+a+r преобразуется к строковому виду и имеет значение строки "char". Связано это с правилом, по которому в выражении строка + символ правый операнд приводится к типу строки, а затем выполняется конкатенация двух строк. Таким образом, вначале ""+'с' превращается в строку "с", затем выражение V+'h' преобразуется в "ch" и т.д. При втором обращении к методу WriteLine() аргумент с + h + а + r воспринимается как арифметическое выражение. Знак + играет роль операции сложения. Коды символов обрабатываются как целые числа, их сумма равна 414. Это число автоматически преобразуется в строку "414" (т.к. аргумент метода WriteLine() должен иметь строковый тип), и эта строка выводится на консоль.

Как отмечено при объяснении правил вычисления значения аргумента метода WriteLine(), результат выражений: строка+символ и символ+строка этоконкатенация строки и строкового представления символа. В следующей программе конкатенация строки и символа выполняется вне метода WriteLine.

// 04_04.cs - строки и символы

static void Main()

{

char simb = 'b'; // десятичный код = 98

string line = "simb = " + simb;

Console.WriteLine(line);

line = simb + " = simb";

Console.WriteLine(line);

line = simb + simb + " = 2 simb";

Console.WriteLine(line);

}

Результат выполнения программы:

simb = b

b = simb

196 = 2 simb

Обратите внимание на выражение simb+simb+" = 2simb". В соответствии с правилами ассоциации для операции + оно вычисляется так: (simb+simb)+ " = 2simb". В скобках символы "ведут себя" как целочисленные значения, и их сумма 196 затем преобразуется в строку.

Хотя мы уже применяли строки в виде строк-литералов и в примерах определяли строку как переменную типа string, но более подробное рассмотрение строк и их взаимоотношений с другими типами языка С# необходимо перенести дальше в раздел, специально посвященный строкам.

Унарные операции ++ и -- изменяют значение кода символьной переменной, однако она не превращается в целочисленную величину, а сохраняет тип char. В то же время суммирование символьной переменной с единицей приводит к получению целочисленного значения. Сложение и вычитание символьных переменных также приводят к соответствующим операциям над их кодами с формированием целочисленных результатов. Следующая программа иллюстрирует приведенные правила.

// 04_05.cs - выражения с символами и строками

static void Main()

{

char cOld = 'a', cNew = cOld;

Console.Write("B последовательности ");

Console.Write(++cNew); // выводит 'b'

Console.Write(++cNew); // выводит 'с'

Console.Write(++cNew + " "); // выводит 'd'

Console.WriteLine(cNew - cOld + " буквы");

}

Результат выполнения программы: В последовательности bcd 3 буквы

Чтобы получить символ с нужным числовым значением кода, нужно применить операции явного приведения типов. Например, так: char ch = (char)94; // значение ch - символ '^'

Для обратного преобразования (из char, например, в uint) достаточно автоматического приведения типов:

uint cod = ch; // значением cod будет 94.

Соседние файлы в папке Lekc_C#