Файл: Технологии программирования. Операции, производимые с данными.pdf
Добавлен: 25.04.2023
Просмотров: 328
Скачиваний: 1
Операция присвоения
Операции присвоения в математике не бывает, её смысл в замене значения выражения слева от операции присвоения значением, полученным после вычисления выражения расположенного справа. Естественно выражение в левой части должно состоят из чего-либо, например, из переменной, свойства или элемента массива, что содержит значение и его можно изменять. Только в языках Delphi и PL-SQL операция присвоения записывается как :=, во всех остальных языках как =.
|
Языки программирования |
C++, C#, Java, PHP, Perl, JavaScript, Transact-SQL, Visual FoxPro, Visual Basic, VBScript |
Delphi, PL-SQL |
|
Операция присвоения |
= |
:= |
Кроме обычной операции присвоения существует так называемые дополнительные операции присвоения. Это операция является комбинированные, они состоят из двух символов: первый знак одной из бинарных операций (работающих с двумя аргументами),а второй знак это операция присвоения. Суть такой операции присвоения в том что над аргументами слева и справа от такой операции присвоения производится операция производится операция заданная первым символом, а результат записывается в аргумент, заданный слева от операции присвоения. Это проще показать на примере: если х равно 3, то после выражения х*=5,в переменной х будет записано число 15,т.е. значение переменной х будет увеличено на 5 (Другими словами выражение х*=5 аналогично х=х*5). Дополнительные операции присвоения есть в языках произошедших от С (C++, C#, Java, PHP, Perl, JavaScript) и Basic'a. (Visual Basic.Net и VBScript).
|
Языки программирования |
C++, C#, Java, PHP, Perl, JavaScript, Visual Basic, 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
Операции сравнения (Операции отношений)
Операции сравнения необходимы для проверки условий и выполнение команд в зависимости от того истинно или ложно условие.
Операции сравнения всегда работают с двумя аргументами, как правило, одни и те же символы операций используются для сравнения различных данных (простых типов, множеств, указателей, строк),в некоторых языках возможно переопределять операции сравнения для классов(как базовых, так и пользовательских), единственное исключение составляют операции сравнения строк в языке Perl, для них введены специальные символы. Операции сравнения возвращают значение логического типа, т.е. истина или ложь.
Рассмотрим каждый вид операций сравнений:
1)Больше, меньше, не меньше, не больше
2) Равенство, неравенство
3) Эквивалентность, неэквивалентность
4) Больше/ меньше/равно
5) Строковые операции сравнения
6) Специальные операции языка SQL
Рассмотрим каждый вид операций сравнения более подробно:
1) Операции больше, меньше, не меньше (больше или равно), не больше (меньше или равно) аналогичны в любом в любом языке и обозначаются: >,<,>=,<= соответственно (В Transact-Sql есть ещё две операции !< и !> аналогичные >= и <= соответственно).
|
больше |
меньше |
не меньше |
не больше |
|
|
Все языки |
> |
< |
>= |
<= |
2) Есть два вида операций равенства:
|
Языки |
C++, C#, Java, PHP, Perl, JavaScript, Java |
Visual Basic, VBScript , Delphi ,Visual FoxPro, Transact-SQL,PL-SQL |
|
Операция |
== |
= |
|
Пример |
12 == 2 |
5 = 5 |
|
Результат |
Ложь |
Истина |
Так же существует два вида операций неравенства (но в некоторых языках присутствует оба вида операций неравенства):
|
Языки |
C++, C#, Java, Perl, JavaScript, Java |
Visual Basic, VBScript , Delphi |
Visual FoxPro, PHP, Transact-SQL, PL-SQL |
|
|
Операция |
!= |
<> |
<> или != |
|
|
Пример |
12 != 2 |
5 <> 5 |
“z” <> “a” |
“You” != “You” |
|
Результат |
Истина |
Ложь |
Истина |
Ложь |
Операции равенства и неравенства во всех языках существуют как для простых типов, так и для указателей, если, конечно, указатели в данном языке присутствуют.
З) Операции эквивалентности и неэквивалентности похожи на операции равенства и неравенства соответственно, единственное отличие в том, что эти операции проверяют не только равенство или неравенство аргументов, но и их тип (два аргумента считаются равными при совпадении и значений и типов аргументов). Естественно, эти операции имеют смысл только для тех языков, у которых типы переменных определены динамически, т.е. у которых тип переменной зависит от её значения. Поэтому подобные операции есть только в двух языках в PHP и JavaScript и записываются в данных языках одинаково: = = = (эквивалентность) и != = (неэквивалентность).
|
Языки программирования |
Эквивалентность |
Неэквивалентность |
|
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, но у которой левый и правый аргумент поменялись местами).
Логические операции
Когда необходимо объединить несколько операций сравнения в одном выражение используются логические операции, это необходимо так как операции сравнения сравнивают только два аргумента, а обычно условие бывает намного сложнее.
Например, чтобы записать условие приема на работу: возраст до 45 лет и опыт работы от 3 лет нужно использовать оператор И(And): (x<=45) And (y>=3), где х- возраст, y-опыт.
Существует четыре вида логических операций:
1) Логическое ИЛИ (OR). Возвращает ложь, только в том случае, если оба аргумента ложны.
2) Логическое И (AND). Возвращает истина, только в том случае, если оба аргумента истина.
3) Логическое НЕТ (Not). Возвращает истину, если аргумент ложный и ложь, если аргумент истинный.
4) Исключающие И(Xor).Возвращает истину, если оба аргумента или вместе истины, или вместе ложны.
Сначала рассмотрим символы каждой из операций:
|
Языки |
C++, C#, Java, JavaScript, Java |
Visual Basic, VBScript , Transact-SQL, PL-SQL |
Delphi |
Visual FoxPro |
Perl, PHP |
|
ИЛИ (OR) |
|| |
Or |
|| или Or |
||
|
И (AND) |
&& |
And |
&& или And |
||
|
НЕТ (NOT) |
! |
Not |
Not или ! |
! |
|
|
Искл.ИЛИ (XOR) |
Нет! |
Xor |
Нет! |
||
Можно заметить из таблицы, что бывает два вида логических операций:
а) С++ подобные это ||,&&,!
б) SQL подобные, это символы And, Or, Not.
Единственное отличие действий логических операций в разных языках заключается в том выполняется ли расчет второго условия в операции ИЛИ (OR) и И (AND), если первое условие окажется истинным (в операции OR) или ложным (в операции AND),так результат будет уже известным (например, если возраст претендента из примера 1 оказался больше 45 лет, то опыт проверять нет необходимости, так как и так понятно, что претендент не подходит).
Как правило, во всех языках, проверяется только первое условие, исключение составляет Visual Basic.Net и VBScript, если в них используется операции Or и And, то проверяются оба условия, если OrElse и AndElse, то в подобных случаях проверяется только первое условие.
Проверка только первого условия в подобных случаях позволяет не тратить время на проверку второго условия и использовать во втором условие код, который не должен выполнятся, если первое условие будет не выполнено. (Например, во втором выражении может использоваться деление на ноль, а в первом условии может проверяться, что делитель не равен нулю, либо во втором условии может быть функция, выводящая диалоговое окно, только если выполнится первое условие).
Рассмотрим каждый логический оператор отдельно в таблицах:
|
y x |
Ложь |
Истина |
|
Ложь |
Ложь |
Истина |
|
Истина |
Истина |
Истина |
x OR y (ИЛИ)
|
y x |
Ложь |
Истина |
|
Ложь |
Ложь |
Ложь |
|
Истина |
Ложь |
Истина |
x AND y (ИЛИ)
|
y x |
Ложь |
Истина |
|
Ложь |
Истина |
Ложь |
|
Истина |
Ложь |
Истина |
x XOR y (Исключающее ИЛИ)
|
x |
Ложь |
Истина |
|
NOT x |
Истина |
Ложь |
NOT x (НЕ)
Побитовые операции
Побитовые операции выполняют действия над каждым битом в числе. Бит минимальная единица представления информации компьютере, он может хранить только два значения 0 или 1.
Вся информация в компьютере представляется в двоичном виде, то есть в виде последовательностей бит, но бит слишком маленькая величина, поэтому минимальная единица, которую компьютеры могут хранить и с которой они могут работать это байт(впрочем, обычно компьютеры работают с 32 или 64 битами).В одном байте 8 бит.
Все числа в компьютере составлены из бит, например числа 131 это следующая последовательность бит 10000011. К сожалению, более подробные объяснения в книгу не поместятся.
Так как, логический тип очень похож на один бит (так как он принимает два значение истина или ложь),то и логические операции имеют свои аналоги в побитовых, которые работают одинаково, но это не значит, что логические и побитовые операции это одно и тоже.
Рассмотрим виды побитовых операций:
1) Аналог логических операций: Or, And, Not, Xor.
2) Сдвиг влево и вправо (безнаковый сдвиг влево, знаковый сдвиг влево)
3) Циклические сдвиги.
Рассмотрим их более подробно:
1)Аналог логических операций (работают точно так же как логичные, если истину заменить на 1,ложь на 0
|
y x |
0 |
1 |
|
0 |
0 |
1 |
|
1 |
1 |
1 |
x OR y (ИЛИ)
|
y x |
0 |
1 |
|
0 |
0 |
0 |
|
1 |
0 |
1 |
x AND y (И)
|
y x |
0 |
1 |
|
0 |
1 |
0 |
|
1 |
0 |
1 |
x XOR y (Исключающее ИЛИ)
|
x |
0 |
1 |
|
NOT x |
1 |
0 |
NOT x (НЕ)
Эти побитовые операции независимо от других бит изменяют значение каждых битов, то есть они действуют таким образом, например: