|
|
|
Операции (Математические,логические,побитовые,сравнения,отношений,преобразования типов)в языках программирования C++,C#.Net,Deplhi,VFP,Transact-SQL,PL-SQL,VBScript,JavaScript,JScript,Visual Basic4.Операции в языках программирования4.1 Введение.
Есть операции в языках программирования, которые очень похожи на операции в математике, но есть операции совсем не похожие на математические. Например в языке С++ есть операции: х<2?3:14 или (integer)15.6. Увы, нет четкого определения понятия операция, поэтому будем считать операцией любые структуры, которые можно использовать в выражениях и которые возвращают определенный результат, но которые нельзя представить, как вызов функции или метода класса в данном языке.(например, если в языке нет функций с переменным количеством аргументов, то если существует встроенная конструкция аналогичная функции с переменным количеством аргументов, то будем считать её операцией.
Рассмотрим основные виды операций в языках программирования: 1) Математические операции. 2) Операции присвоения 3) Операция сравнения 4) Логические операции 5) Побитовые операции 6) Операции работы со строками 7) Операции по работе с указателями и памятью 8) Операции преобразования типов и получения размеров объектов. 9) Операции по определению видимости имен и выбора членов. 10) Операция выбора 11) Операции по работе с исключениями 12) Другие операции
Также можно разделять операции по количеству аргументов: 1) Унарные (Операции с одним аргументом) 2) Бинарные (Операции с двумя аргументами) 3) Тернарные (Операции с тремя аргументами) 4) Сложные (Операции, которые нельзя отнести к первым трем)
4.2 Математические операции.Существует пять видов математических операций: 1) Четыре действия арифметики; 2) Операция целочисленного деления; 3) Операция деления по модулю; 4) Операция возведения в степень; 5) Инкремент и декремент; Рассмотрим их подробнее: 1) Во всех рассматриваемых нами языках программирования символы четырех действий арифметики (сложение, вычитание, умножение, деление) одинаковы: +,-,*,/. 2) Специальная операция целочисленного деления есть только в языках Visual Basic, VBScript: \ и в языке Delphi: div, но во всех языках, произошедших от C++(Visual C++,C++ Builder,C# Java, JavaScript, PHP, Perl),если оба аргумента у операции деления (/) целые числа, то она всегда возвращает целый результат (т.е. действует аналогично операции целочисленного деления).
3). Операция деления по модулю ( эта операция возвращает разность между первым аргументом и максимальным числом делящимся на второй аргумент без остатка и меньшим или равным первому аргументу).
Операция деления по модулю (например, в Visual Basic'e) аналогична следующей x mod y аналогична x - (x\y)*y. В Visual FoxPro и PL-SQL такой операции нет. 4) Операция возведения в степень (существует только в языках Perl, PL-SQL, Visual Basic, VBScript и Visual FoxPro):
5) Операция инкремент(декремента) Это операция с одним аргументом предназначена для увеличения(уменьшения) аргумента на единицу. Во всех языках, где есть инкремент или декремент, они определены одинаково два плюса или минуса подряд (++ или --). Если в языке существует инкремент или декремент, то существует две его формы: префиксная (++х,--х) и постфиксная (х--,х++).Инкремент или декремент существуют только в языках, произошедших от языка C++ (Visual C++,C++ Builder, Java, JavaScript, PHP, Perl). Префиксная форма отличается от постфиксной, тем что в префиксной форме аргумент изменяется и новое значение участвует в выражении, а в постфиксной форме сначала полностью вычисляется выражение, а уже потом аргумент изменяется. Это проще показать на примере: Если х = 10, то 3*(++х) равно 33,а 3*(х++) равно 30, но х после обоих этих выражений будет равен 11.
Все остальные действия математики (округления, получение значений тригонометрических функций, действия над комплексными функциями и т.д.), а также целочисленное деление, возведение в степень, деление по модулю (если в данном языке они не реализованы как операции) реализованы в виде либо встроенных функций, либо методов специальных классов. 4.3 Операция присвоения.
Операции присвоения в математике не бывает, её смысл в замене значения выражения слева от операции присвоения значением, полученным после вычисления выражения расположенного справа. Естественно выражение в левой части должно состоят из чего-либо, например, из переменной, свойства или элемента массива, что содержит значение и его можно изменять. Только в языках Delphi и PL-SQL операция присвоения записывается как :=, во всех остальных языках как =.
Кроме обычной операции присвоения существует так называемые дополнительные операции присвоения. Это операция является комбинированные, они состоят из двух символов: первый знак одной из бинарных операций (работающих с двумя аргументами),а второй знак это операция присвоения. Суть такой операции присвоения в том что над аргументами слева и справа от такой операции присвоения производится операция производится операция заданная первым символом, а результат записывается в аргумент, заданный слева от операции присвоения. Это проще показать на примере: если х равно 3, то после выражения х*=5,в переменной х будет записано число 15,т.е. значение переменной х будет увеличено на 5 (Другими словами выражение х*=5 аналогично х=х*5). Дополнительные операции присвоения есть в языках произошедших от С (C++, C#, Java, PHP, Perl, JavaScript) и Basic'a. (Visual Basic.Net и VBScript).
Внимание: 1) В языках производных от С допускается использовать любое количество операций присвоения в одном операторе.(например допустимо х=у+=z=6). 2) Дополнительные операции присвоения появились в Visual Basic.Net, в Visual Basic их ещё не существовало. 3) В Visual FoxPro кроме обычных операций присвоения есть специальная команда вида: STORE значение TO переменная1, переменная2, ... , переменнаяN. Она присваивает значение всем переменным и свойствам классов перечисленных после TO. Например, команда STORE 5 TO x,y,z присвоит число 5 переменным x, y, z 3.4 Операции сравнения (Операции отношений)
Операции сравнения необходимы для проверки условий и выполнение команд в зависимости от того истинно или ложно условие. Операции сравнения всегда работают с двумя аргументами, как правило, одни и те же символы операций используются для сравнения различных данных (простых типов, множеств, указателей, строк),в некоторых языках возможно переопределять операции сравнения для классов(как базовых, так и пользовательских), единственное исключение составляют операции сравнения строк в языке Perl, для них введены специальные символы. Операции сравнения возвращают значение логического типа, т.е. истина или ложь. Рассмотрим каждый вид операций сравнений: 1)Больше, меньше, не меньше, не больше 2) Равенство, неравенство 3) Эквивалентность, неэквивалентность 4) Больше/ меньше/равно 5) Строковые операции сравнения 6) Специальные операции языка SQL Рассмотрим каждый вид операций сравнения более подробно: 1) Операции больше, меньше, не меньше (больше или равно), не больше (меньше или равно) аналогичны в любом в любом языке и обозначаются: >,<,>=,<= соответственно (В Transact-Sql есть ещё две операции !< и !> аналогичные >= и <= соответственно).
2) Есть два вида операций равенства:
Так же существует два вида операций неравенства (но в некоторых языках присутствует оба вида операций неравенства):
Операции равенства и неравенства во всех языках существуют как для простых типов, так и для указателей, если, конечно, указатели в данном языке присутствуют. З) Операции эквивалентности и неэквивалентности похожи на операции равенства и неравенства соответственно, единственное отличие в том, что эти операции проверяют не только равенство или неравенство аргументов, но и их тип (два аргумента считаются равными при совпадении и значений и типов аргументов). Естественно, эти операции имеют смысл только для тех языков, у которых типы переменных определены динамически, т.е. у которых тип переменной зависит от её значения. Поэтому подобные операции есть только в двух языках в PHP и JavaScript и записываются в данных языках одинаково: = = = (эквивалентность) и != = (неэквивалентность)
4) В языке Perl, кроме обычных операций сравнения существуют уникальная операция сравнения, она называется больше/меньше/равно и обозначается символом <=>, её суть: если левый аргумент меньше правого она возвращает -1, если равен 0, если больше 1. 5) Строковые операции сравнения. Сравнение двух строк отличается от сравнения других типов данных в том, что не понятно, как сравнить две строки. Например, сравнить два символа несложно, в любом языке берется код каждого символа, и сравниваются их коды (Причем строчный и заглавный символ будут не равны друг другу, например “а” не будет равен “А”). Сравнить две строки одинаковой не нулевой длины тоже не проблема: сравниваются по очереди сначала первые символы в каждой строке и если они равны, то вторые и т.д. до тех пор, пока не будет отличных символов в сравниваемых строках и больше будет та строка, у который код первого отличающегося символа больше. Строки будут равны, если в них совпадают все символы. Например, строка "hello, world" больше строки "hello, pеаce" потому что символ “w” больше чем “p”. Строки всегда сравниваются с учетом регистра (т.е. заглавная буква не будет равна строчной), чтобы сравнить две строки без учета регистра нужно сначала их привести с помощью специальных функций в один регистр. Но при разных длинах строк возникает проблема, например будут ли равны строки "hello, world" и "hello”? А строки "hello, world" и “” (пустая строка)? Или строки "hello” и "hello ”? Во всех языках, кроме Perl используются те же операции сравнения, что и для остальных типов. В Perl используется операции: gt (аналог <),lt (аналог >), cmp (аналог <=>),ne (аналог !=),eg (аналог == в Visual FoxPro),le (== в Visual FoxPro),ge (аналогично le, но у которой левый и правый аргумент поменялись местами).
3.5 Логические операции.
Когда необходимо объединить несколько операций сравнения в одном выражение используются логические операции, это необходимо так как операции сравнения сравнивают только два аргумента, а обычно условие бывает намного сложнее. Например, чтобы записать условие приема на работу: возраст до 45 лет и опыт работы от 3 лет нужно использовать оператор И(And): (x<=45) And (y>=3), где х- возраст, y-опыт. Существует четыре вида логических операций: 1) Логическое ИЛИ (OR). Возвращает ложь, только в том случае, если оба аргумента ложны. 2) Логическое И (AND). Возвращает истина, только в том случае, если оба аргумента истина. 3) Логическое НЕТ (Not). Возвращает истину, если аргумент ложный и ложь, если аргумент истинный. 4) Исключающие И(Xor).Возвращает истину, если оба аргумента или вместе истины, или вместе ложны. Сначала рассмотрим символы каждой из операций:
Можно заметить из таблицы, что бывает два вида логических операций: а) С++ подобные это ||,&&,! б) SQL подобные, это символы And, Or, Not. Единственное отличие действий логических операций в разных языках заключается в том выполняется ли расчет второго условия в операции ИЛИ (OR) и И (AND), если первое условие окажется истинным (в операции OR) или ложным (в операции AND),так результат будет уже известным (например, если возраст претендента из примера 1 оказался больше 45 лет, то опыт проверять нет необходимости, так как и так понятно, что претендент не подходит). Как правило, во всех языках, проверяется только первое условие, исключение составляет Visual Basic.Net и VBScript, если в них используется операции Or и And, то проверяются оба условия, если OrElse и AndElse, то в подобных случаях проверяется только первое условие. Проверка только первого условия в подобных случаях позволяет не тратить время на проверку второго условия и использовать во втором условие код, который не должен выполнятся, если первое условие будет не выполнено. (Например, во втором выражении может использоваться деление на ноль, а в первом условии может проверяться, что делитель не равен нулю, либо во втором условии может быть функция, выводящая диалоговое окно, только если выполнится первое условие). Рассмотрим каждый логический оператор отдельно в таблицах:
x OR y (ИЛИ)
x AND y (ИЛИ)
x XOR y (Исключающее ИЛИ)
NOT x (НЕ)
3.6 Побитовые операции.
Побитовые операции выполняют действия над каждым битом в числе. Бит минимальная единица представления информации компьютере, он может хранить только два значения 0 или 1. Вся информация в компьютере представляется в двоичном виде, то есть в виде последовательностей бит, но бит слишком маленькая величина, поэтому минимальная единица, которую компьютеры могут хранить и с которой они могут работать это байт(впрочем, обычно компьютеры работают с 32 или 64 битами).В одном байте 8 бит. Все числа в компьютере составлены из бит, например числа 131 это следующая последовательность бит 10000011. К сожалению, более подробные объяснения в книгу не поместятся. Так как, логический тип очень похож на один бит (так как он принимает два значение истина или ложь),то и логические операции имеют свои аналоги в побитовых, которые работают одинаково, но это не значит, что логические и побитовые операции это одно и тоже. Рассмотрим виды побитовых операций: 1) Аналог логических операций: Or, And, Not, Xor. 2) Сдвиг влево и вправо (безнаковый сдвиг влево, знаковый сдвиг влево) 3) Циклические сдвиги. Рассмотрим их более подробно: 1)Аналог логических операций (работают точно так же как логичные, если истину заменить на 1,ложь на 0)
x OR y (ИЛИ)
x AND y (И)
x XOR y (Исключающее ИЛИ)
NOT x (НЕ) Эти побитовые операции независимо от других бит изменяют значение каждых битов, то есть они действуют таким образом, например:
Рассмотрим как реализуются эти четыре операции в различных языках (Basic,PL-SQL??):
2) Сдвиг влево и вправо заключается в том, что биты в числе перемещаются влево или вправо на заданное количество позиций. При обычном сдвиге биты вышедшие за границы числа пропадают, а на пустые места записываются нули, при циклическом сдвиге биты, вышедшие за границы числа, возвращаются с другой стороны числа на пустые места.
Рассмотрим как реализуются операции сдвига в различных языках (Basic,PL-SQL??):
Так как побитовые операции используются сравнительно редко, то в некоторых языках вместо побитовых операций используются функции с аналогичными возможностями. Рассмотрим реализацию побитовых операций в разных языках (под х обозначаем первый аргумент, под у - второй аргумент, l - сдвиг):
Сдвиг вправо это самый быстрый способ возведения числа в степень двойки, сдвиг влево это самый быстрый способ получения корня степени двойки. 3.7 Операция булевого выбора.
Операция булевого выбора аналог оператора выбора If...Еlsе .Её суть в том, что сначала вычисляется условие и если оно истинно, то возвращается первое выражение, если ложно, то второе выражение.
3.8 Операция последовательного выполнения.
В некоторых языках есть операция последовательного выполнения, т.е. можно записать несколько выражений, разделив их запятыми, результатом будет значение самого левого выражения. Чаще всего подобная операция используется при записи параметров цикла for. Например, в языке Jаvа данную операцию разработчики запретили для использования, но при этом её можно использовать для записи параметров в операторе for.(Например, так for(i=1,j=5;i<=5;i++,j--) ...)
3.9 Операции возвращающие тип объектов. (???)Операция, возвращающая информацию о типе:
Операция, возвращающая имя типа:
Операция, возвращающая объект, хранящий информацию о типе переменной:
3.10 Операции преобразования типов. (???)
Для удобства программирования в языке программирования в язык, производных от С++ введены специальные операции преобразование типов (так методы преобразование одного типа в другой достаточно сложны для понимания и редко удобно),самая простая операция преобразования (она есть во всех языках, произошедших от С++ () следующая (тип) выражение, где тип, это имя типа, к которому необходимо привести выражение, например byte, int, char, double и т.п. Например, выражение (int)2.031 вернет целое число 2.
Преобразование типов
Родственные преобразование типов
Преобразования типов
3.11 Операция обращения к элементам классов и структур. (???)
В любом языке для того, чтобы обратиться к элементу (например, свойству или методу) класса или структуры используется операция '.' (Например в среде .Net можно записать System.out.print("Hi!")). Правда, с указателями на класс или структуру в языках C++ и C# нельзя использовать операцию точка, а необходимо использовать символ ->.Например, в языке C++ можно записать так p->print("Hi!"), где p - указатель на класс, имеющий метод print. Чаще всего эта операция используется в языке Borlаnd C++ Builder. 3.12 Аналоги математических операций для данных нечислового типа.
Кроме чисел операции +,-,*,/ могут использоваться не только для данных числового типа, но и для указателей, строк, времени, дат и т.п. Специальные операции вводятся для сложения строк в языках Perl, PHP (символ .),в языках VBScript, Visual Basic, VBA и Visual FoxPro символ .) в остальных языках используется символ +. В Delphi символы +,-,* для операций с множествами (+ это операция сложения множеств,- это операция пересечения множеств, * это декартово произведение). Можно использовать операции + и - при работе с датами. Сложение даты с числом Х вернет дату на Х дней больше, а вычитание - на Х дней меньше. Разность двух дат вернет количество дней, на которые эти даты отличаются. Если в языке существуют указатели, то с ними можно использовать операции +,-,* причем допускается сложение, вычитание и умножение указателя и числа и вычитание двух указателей, другие операции не допустимы.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ваш комментарий
Добавить эту поисковую систему в Ваш Google Bar Разделы учебника