Арифметические выражения
Преобразования типов данных
Разнообразие типов данных в языке C++ дает программисту возможность выбирать вариант, соответствующий конкретной потребности. Однако такое разнообразие, с другой стороны, усложняет задачу компьютера. Например, сложение двух чисел типа short может выполняться с помощью иных машинных команд, чем сложение двух чисел типа long. Когда имеется 11 типов целочисленных данных и три типа данных с плавающей точкой, компьютеру приходится обрабатывать множество различных случаев, особенно если в одной операции смешаны данные различных типов. Чтобы не допустить возможной путаницы, в языке C++ многие преобразования типов данных выполняются автоматически:
- Преобразование данных осуществляется, когда данные одного арифметического типа присваиваются переменной другого арифметического типа.
// данные типа int преобразуются в данные // типа float
float tree = 3;
// данные типа float преобразуются
// в данные типа int
int guess = 3.9832;
Результат:
tree = 3.0
guess = 3
- Преобразование данных осуществляется, когда в выражении содержатся данные разных типов.
Когда некоторая операция выполняется над данными двух разных типов, то данные меньшего типа преобразуются в данные большего типа. Например:
int i=45;
float f=450.123;
float r=i+f; // результат float
- Преобразование данных осуществляется при передаче аргументов в функции.
Если не знать, что происходит при таких автоматических преобразованиях, то результаты выполнения некоторых программ могут оказаться для вас неожиданными.
Приведение типов:
В общем виде:
(имяТипа) значение
// преобразует значение в данные типа имяТипа
ИмяТипа (значение)
// преобразует значение в данные типа имяТипа
Пример:
float f=450.123;
int guess;
guess = (int)(3.9832 + f);
Или
guess = int(3.9832 + f);
Операции и выражения.
Поразрядные логические операции.
Язык С++ поддерживает следующие поразрядные логические операции.
• Логическое И (AND) &
• Поразрядное логическое сложение по модулю 2 (XOR – исключающее ИЛИ) ^
• Поразрядное логическое ИЛИ (OR) |
• Поразрядная инверсия ~
Каждый бит результата определяется по битам операндов так, как это показано в следующей таблице.
Операнд 1 | Операнд 2 | AND | OR | XOR |
Инверсия требует единственного операнда справа от знака операции ~. Результат образуется поразрядной инверсией всех битов операнда.
Примеры….
int i=17919, /* i=0100 0101 1111 1111 */
j=255; /* j=0000 0000 1111 1111 */
Int r;
r=i^j; /* r=4500 = 0100 0101 0000 0000 */
r=i|j; /* r=17919= 0100 0101 1111 1111 */
r=i&j /* r=255 = 0000 0000 1111 1111 */
r=~j /* r=62280 = 1111 1111 0000 0000 */
Дата добавления: 2016-04-22; просмотров: 833;