Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л_4_Операции_и_выражения.doc
Скачиваний:
10
Добавлен:
05.11.2018
Размер:
660.99 Кб
Скачать

7. Проанализируйте преобразование типов в операторах присваивания:

int main()

{double d; float f; long l; short sh;

sh = l= f = d = 100/3; //целое деление, т.к. числа без точки

//присваивание выполняется справа налево

printf ("d=%lf\t", d); // 33.000000

printf ("f=%f\t", f); // 33.000000

printf ("l=%d\t", l); // 33

printf ("sh=%d\t\n", sh); // 33

d = f= l = sh = 100/3; //целое деление

printf ("sh=%d\t", sh); // 33

printf ("l=%d\t", l); // 33

printf ("f=%f\t", f); // 33.000000

printf ("d=%lf\t\n", d); // 33.000000

sh = l= f = d = 100/3.; //деление с плавающей точкой

printf ("d=%lf\t", d); // 33.333333

printf ("f=%f\t", f); // 33.333332

printf ("l=%d\t", l); // 33

printf ("sh=%d\t\n", sh); // 33

d = f= l = sh = (double)100/3; // целое деление, приведение типа к double

printf ("sh=%d\t", sh); // 33

printf ("l=%d\t", l); // 33

printf ("f=%f\t", f); // 33

printf ("d=%lf\t\n", d); // 33

sh = l= f = d = (double)(100000/3); // целое деление, приведение типа к double

printf ("d=%lf\t", d); // 33333

printf ("f=%f\t", f); // 33333

printf ("l=%d\t", l); // 33333

printf ("sh=%d\t\n", sh); //-32203 число не попадает в диапазон типа!!

d = f= l = sh = 100000/3; //целое деление

printf ("sh=%d\t", sh); //-32203 число не попадает в диапазон типа!!

printf ("l=%d\t", l); // все остальные присваивания будут неверны

printf ("f=%f\t", f);

printf ("d=%lf\t\n", d);

_getch();

return 0;

}

8. Приведение типа в случае использования указателей:

// (пример пока сложный для понимания)

int main() {

unsigned long block = 0xffeeddccL; // область памяти из 4-х байтов

void *ptr = █ //указатель на начало области

unsigned char ch;

unsigned short two_bytes;

unsigned long four_bytes;

//адрес переменной определяется адресом ее младшего байта

ch = *(unsigned char*) ptr; // взятие значения по адресу (1 байт)

printf ("%x\n", ch); // cc

two_bytes = *(unsigned short*) ptr; //взятие значения по адресу (2 байта)

printf ("%x\n", two_bytes); // ddcc

four_bytes = *(unsigned long *) ptr; ; //взятие значения по адресу (4 байта)

printf ("%x\n", four_bytes); // ffeeddcc

_getch();

return 0;

}

адрес переменной

ff

ee

dd

cc