Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Уточнение типа константы-литерала использованием суффикса




 

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;

 }

-----------------------------------------------------------------------------------------





Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 358 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

В моем словаре нет слова «невозможно». © Наполеон Бонапарт
==> читать все изречения...

2405 - | 2365 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.