123 //тип signed int
11234 L или 11234 l //тип signed long int
123 U или 123u //тип unsigned int
2.78F или 2.78 f //тип float
2.78 //тип double
2.78 L или 2.78 l //тип long double
-----------------------------------------------------------------------------------------
следующие объявления констант не эквивалентны:
const int K = 7;
#define K 7
В первой строке определяется именованная типизированная константа, занимающая некоторую область памяти, а во второй – препроцессорная константа, под которую память не выделяется.
-----------------------------------------------------------------------------------------
Примеры использования операций
Операция присваивания
![]() |
Для корректного выполнения операции присваивания необходимо выполнение условия совместимости типов операндов. Тип переменной в левой части операции присваивания должен быть не младше типа выражения в правой части. В противном случае требуется явное преобразование (приведение) типа выражения в правой части операции к типу переменной в левой части.
Таблица 2. Правила преобразования типов для операции присваивания
l-value = | r-value | возможные потери |
char, signed char | unsigned char | если r-value > 127, результатом будет отрицательное число |
unsigned char | char, signed char | если r-value < 0, результатом будет положительное число |
char | short, short int | старшие 8 битов |
char | int, long int | старшие 24 бита |
short, short int | int, long int | старшие 16 битов |
short, short int, int, long int | float, double | дробная часть и, возможно, что-то еще |
float | double | точность, возможно переполнение или потеря порядка |
//пример 25.
Что напечатает программа:
#define PRINT(x) printf("%d\n", x)
int x = 2, y, z;
x *= 3+2; PRINT(x); | x= x*5=10 |
x *= y = z = 4; PRINT(x); | z=4 à y=4 à x=x*y=10*4=40 |
x = y == z; PRINT(x); | 4==4 à x=true, напечатает 1 |
x == (y = z); PRINT(x); | значение выражения = 0, но x=1 |
//пример 26.
#define PRINT printf("%d\t %d\n", x, y)
double d=3.2, x;
int i=2, y;
x = (y = d/i)* 2; PRINT(x, y); | y=1à x= 2 |
y = (x = d/i)* 2; PRINT(x, y); | x=1.6 ày=3 |
y = d * (x = 2.5/d); PRINT(y); | y=2 |
x = d*(y = ((int)2.9+1.1)/d); PRINT(x, y); | y=0 à x=0 |
//пример 27.
#include <stdio.h>
#include <conio.h>
int main()
{
// обратить внимание на warning и объяснить причину
double d = 3.2, x;
int k, i = 2;
x = (k = d/i)* 2;
printf("% f \n", x); // !!! warning C4244
k = (x = d/i)* 2;
printf("% d \n", k); // !!! warning C4244
k = d * (x = 2.5/d);
printf("% d \n", k); // !!! warning C4244
x = d *(k =((int)2.9 + 1.1)/d);
printf("% f \n ", x); // !!! warning C4244
_getch();
return 0;
}
!!! warning C4244: '=': conversion from 'double' to 'int', possible loss of data
Объяснить результат, указать способы избавления от warning:
2.000000
3
2
0.000000
-----------------------------------------------------------------------------------------
Арифметические операции
//пример 28.
#include <stdio.h> //«прокрутить» операторы вручную и проверить результаты
#include <conio.h>
int main()
{
int x = -3+4*5-6;
printf("%d \n ", x); //11
x = -3+4%5-6;
printf("%d \n ", x); //-5
x = -3*4%-6/5;
printf("%d \n ", x); //0
x = (7+6)%5/2;
printf("%d \n ", x); //1
_getch();
return 0;
}
-----------------------------------------------------------------------------------------
//пример 29.
#include <stdio.h> //«прокрутить» операторы вручную и проверить результаты
#include <conio.h>
int main()
{
Int x, y, z;
x = y = 1; z = x++ - 1;
printf("%d\n", x); printf("%d\n", z); //2 0
z += -x++ + ++y;
printf("%d\n", z); printf("%d\n", x); printf("%d\n", y); //0 3 2
z = x/ ++x;
printf("%d\n", z); printf("%d \n ", x); //1 4
_getch();
return 0;
}
-----------------------------------------------------------------------------------------
//пример 30.
#include <stdio.h> //«прокрутить» операторы вручную и проверить результаты
#include <conio.h>
int main()
{
int x = 2, y, z;
x *= 3+2;
printf("%d\n", x); //10
x *= y = z = 4;
printf("%d\n", x); //40
x = y == z;
printf("%d\n", x); //1
x ==(y = z);
printf("%d \n ", x); //1
_getch();
return 0;
}
-----------------------------------------------------------------------------------------