Операции целочисленной арифметики
К операциям целочисленной арифметики относятся:
· целочисленное деление /;
· остаток от деления %.
При целочисленном делении операция / возвращает целую часть частного (дробная часть отбрасывается), а операция % – остаток от деления. Ниже приведены примеры этих операций
11 % 4 = 3
11 / 4 = 2
7 % 3 = 1
7 / 3 = 2
26 / 5 = 5
26 % 5 = 1
Операции битовой арифметики
Во всех операциях битовой арифметики действия происходят над двоичным представлением целых чисел. К операциям битовой арифметики относятся следующие операции С++.
Арифметическое И (&). Оба операнда переводятся в двоичную систему, затем над ними происходит логическое поразрядное умножение операндов по следующим правилам.
1 & 1 = 1 1 & 0 = 0 0 & 1 =0 0 & 0 = 0
Рассмотрим пример использования арифметического И.
#include <stdio.h>
int main ()
{
int A, B;
A=13;
B=23;
printf("\n%d\n", A & B)
}
Этот участок программы работает следующим образом. Число А=13 и В=23 переводятся в двоичное представление 0000000000001101 и 0000000000010111. Затем над ними поразрядно выполняется логическое умножение.
& 0000000000001101
0000000000010111
0000000000000101
Результат переводится в десятичную систему счисления, в нашем случае будет число 5. Таким образом, 13 & 23 = 5.
Арифметическое ИЛИ (|). Здесь также оба операнда переводятся в двоичную систему, после чего над ними происходит логическое поразрядное сложение операндов по следующим правилам.
1 | 1 = 1 1 | 0 = 1 0 | 1 =1 0 | 0 = 0
Например:
|
|
#include <stdio.h>
int main ()
{
int A, B;
A=13;
B=23;
printf("\n%d\n", A | B)
}
Над двоичным представлением значений А и В выполняется логическое сложение.
| 0000000000001101
0000000000010111
0000000000011111
После перевода результата в десятичную систему имеем 13 | 23 =31.
Арифметическое исключающее ИЛИ (^). Здесь также оба операнда переводятся в двоичную систему, после чего над ними происходит логическая поразрядная операция ^ по следующим правилам.
1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 1 =1 0 ^ 0 = 0
Арифметическое отрицание (~). Эта операция выполняется над одним операндом. Применение операции not вызывает побитную инверсию двоичного представления числа. Например, рассмотрим операцию not 13.
0000000000001101
~a 1111111111110010
После перевода результата в десятичную систему получаем ~13=-14.
Сдвиг влево (M << L). Двоичное представление числа M сдвигается влево на L позиций. Рассмотрим пример использования операции <<, 17 << 3. Представляем число 17 в двоичной системе 10001, сдвигаем число на 3 позиции влево 10001000, в десятичной системе это число 136. 17 << 3 =136. Заметим, что сдвиг на один разряд влево соответствует умножению на 2, на два разряда – умножению на 4, на три – умножению на 8. Таким образом, операция M << L эквивалентна M.2L.
Cдвиг вправо (M >> L). В этом случае двоичное представление числа M сдвигается вправо на L позиций, что эквивалентно целочисленному делению числа M на .
|
|
Например, 25 >> 1=12, 25 >> 3= 3.
Логические операции и операции отношения
Логические операции выполняются над логическими значениями ИСТИНА (true) и ЛОЖЬ (false). В языке С ложью является 0, а истина – любое значение, отличное от нуля. В С++ появился тип bool. Результатами операций отношения (<, <=, >, >=, ==, ~=) или логической операции является ИСТИНА (true, 1) или ЛОЖЬ (false, 0). В Си определены следующие логические операции ИЛИ (||), И(&&), НЕТ (!) (см. табл. 2.3).
Таблица 2.3. Логические операции языка Си.
A | B | !A | A&&B | A||B |
0 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 0 | 1 |
1 | 1 | 0 | 1 | 1 |
Операция ?
Для организации разветвлений в простейшем случае можно использовать оператор ? следующей структуры:
Условие? Выражение1: Выражение 2;
Операция работает так. Если Условие истинно (не равно 0), то результатом будет Выражение1, в противном случае Выражение2.
Например, оператор
y=x<0 ? –x: x;
записывает в переменную y модуль числа х.
Операция явного приведения типа
Для приведения выражения к другому типу данных в С++ существует операция явного приведения типа:
|
|
(тип) выражение
Здесь тип – любой поддерживаемый в С++ тип данных.
Например,
x=5;
y=x/2;
z=(float) x/2;
В результате этого участка программы переменная y принимает значение 2 (результат целочисленного деления), а переменная z – 2.5/
2.6. Стандартные математические функции в языке С++
В C++ определены стандартные функции над арифметическими операндами (табл. 2.4).
Таблица 2.4. Некоторые стандартные математические функции в Си
Обозначение | Действие |
abs(x) | Модуль целого числа |
fabs(x) | Модуль вещественного числа |
sin(x) | Функция синус |
cos(x) | Функция косинус |
tan(x) | Функция тангенс |
atan(x) | Арктангенс |
atan2(y,x) | Арктангенс в диапазоне |
sinh(x) | Гиперболический синус х |
cosh(x) | Гиперболический косинус х |
tanh(x) | Гиперболический тангенс x |
exp(x) | ex |
log(x) | Функция натурального логарифма ln(x), x>0 |
log10(x) | Функция десятичного логарифма log10(x), x>0 |
pow(x,y) | xy. Ошибка области определения, если х=0, y≤0 или x<0 и y – не целое |
sqrt(x) | , x≥0 |
Определенную проблему представляет возведение Х в степень n. Функция pow не может возводить отрицательные числа в дробную степень. В этом случае можно воспользоваться формулой , которая программируется с помощью стандартных функций на языке С++ – -exp(n*log(fabs(x))) или –pow(fabs(x),y).
|
|
Ввод-вывод в языке Си
Дата добавления: 2019-09-13; просмотров: 255; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!