SlideShare a Scribd company logo
1 of 22
ANSI C
Language
Introduction
Lection 5
Содержание
• Базовые типы данных
• Объявления переменных и констант
• Преобразования типов
27.09.2021 17:52 Introduction 2
Базовые типы данных
Тип данных
Размер в
байтах
Диапазон значений
char (он же signed char) 1 -128 … 127
unsigned char 1 0 … 255
short (он же signed short) 2 -32 767 … 32 767
unsigned short 2 0 … 65 535
long (он же signed long) 4 -2 147 483 647 … 2 147 483 647
unsigned long 4 0 … 4 294 967 295
long long 8 -(263 - 1) … (263 - 1)
unsigned long long 8 0 … (264 - 1)
(signed ) int / unsigned int 2 / 4 Размер зависит от разрядности микроконтроллера
float 4 1E-37 …1E+37 (точность не менее 6 значащих цифр)
double 8 1E-37 …1E+37 (точность не менее 10 значащих цифр)
long double 10 1E-37 …1E+37 (точность не менее 10 значащих цифр)
bool 1 FALSE (0) или TRUE (1)
27.09.2021 17:52 Introduction 3
Базовые типы данных
27.09.2021 17:52 Introduction 4
Объявления переменных
Синтаксис
<тип данных> <имя переменной> [= значение];
Примеры
unsigned char myNewVariable;
unsigned char counter = 10;
short a,b,c;
long long veryBigIntNumber = counter * 5000000;
float coef = 1/3;
27.09.2021 17:52 Introduction 5
Объявления констант
Синтаксис
const [тип данных] <имя константы> = <значение>;
Примеры
const unsigned int maxTemp = 100;
const minTemp = 0;
27.09.2021 17:52 Introduction 6
#define или const вот в чем вопрос?
Преобразования типов
Преобразование значения переменной одного типа в
значение другого типа называется приведение типа и
бывает явным и неявным:
• при явном приведении перед выражением следует
указать в круглых скобках имя типа, к которому
необходимо преобразовать исходное значение.
• при неявном приведении преобразование происходит
автоматически, по правилам, заложенным в языке Си.
27.09.2021 17:52 Introduction 7
Преобразования типов (правила)
Тип преобразуется к наиболее общему из всех операндов.
• Если в выражении появляются операнды различных типов, то они преобразуются к некоторому
общему типу, при этом к каждому арифметическому операнду применяется такая последовательность
правил:
• Если один из операндов в выражении имеет тип long double, то остальные тоже преобразуются к типу
long double.
• В противном случае, если один из операндов в выражении имеет тип double, то остальные тоже
преобразуются к типу double.
• В противном случае, если один из операндов в выражении имеет тип float, то остальные тоже
преобразуются к типу float.
• В противном случае, если один из операндов в выражении имеет тип unsigned long, то остальные тоже
преобразуются к типу unsigned long.
• В противном случае, если один из операндов в выражении имеет тип long, то остальные тоже
преобразуются к типу long.
• В противном случае, если один из операндов в выражении имеет тип unsigned, то остальные тоже
преобразуются. к типу unsigned.
• В противном случае все операнды преобразуются к типу int. При этом тип char преобразуется в int со
знаком; тип unsigned char в int, у которого старший байт всегда нулевой; тип signed char в int, у
которого в знаковый разряд передается знак из сhar; тип short в int (знаковый или беззнаковый).
27.09.2021 17:52 Introduction 8
Пример #1
Явное приведение типа
unsigned char a;
unsigned long b;
float c;
a = 10;
b = (unsigned long)a;
c = (float)b;
27.09.2021 17:52 Introduction 9
Неявное приведение типа
unsigned char a;
unsigned long b;
float c;
с = 1000.5;
b = с;
a = b;
Пример #2
27.09.2021 17:52 Introduction 10
int main()
{
int i = 1000000;
char c = i;
printf("Value is %d", c);
return 0;
}
Пример #2
27.09.2021 17:52 Introduction 11
int main()
{
int i = 1000000;
char c = i;
printf("Value is %d", c);
return 0;
}
Value is 64
Пример #3
27.09.2021 17:52 Introduction 12
int main()
{
int i = 8;
int j = 3;
float f_res = i / j;
printf("Result is %.10f", f_res);
}
Пример #3
27.09.2021 17:52 Introduction 13
int main()
{
int i = 8;
int j = 3;
float f_res = i / j;
printf("Result is %.10f", f_res);
}
Result is 2.0000000000
Пример #3
27.09.2021 17:52 Introduction 14
Result is 2.6666667461
int main()
{
int i = 8;
int j = 3;
float f_res = (float) i / (float) j;
printf("Result is %.10f", f_res);
}
Пример #4
27.09.2021 17:52 Introduction 15
int main()
{
unsigned int i = 65535;
unsigned char c = i;
unsigned int j = c;
printf("Value i=%u, c=%u, j=%u", i, c, j);
}
Пример #4
27.09.2021 17:52 Introduction 16
int main()
{
unsigned int i = 65535;
unsigned char c = i;
unsigned int j = c;
printf("Value i=%u, c=%u, j=%u", i, c, j);
}
Value i=65535, c=255, j=255
Пример #5
27.09.2021 17:52 Introduction 17
int main()
{
unsigned int i = 65535;
unsigned long long j = i;
printf("Value is %u, %llu", i, j);
}
Пример #5
27.09.2021 17:52 Introduction 18
int main()
{
unsigned int i = 65535;
unsigned long long j = i;
printf("Value is %u, %llu", i, j);
}
Value is 65535, 65535
Пример #6
27.09.2021 17:52 Introduction 19
int main()
{
unsigned char i = 250;
signed char s = i;
printf("Value is %d, %d", i, s);
}
Пример #6
27.09.2021 17:52 Introduction 20
int main()
{
unsigned char i = 250;
signed char s = i;
printf("Value is %d, %d", i, s);
}
Value is 250, -6
Пример #7
27.09.2021 17:52 Introduction 21
int main()
{
unsigned char i = 50;
signed char s = i;
printf("Value is %d, %d", i, s);
}
Пример #7
27.09.2021 17:52 Introduction 22
int main()
{
unsigned char i = 50;
signed char s = i;
printf("Value is %d, %d", i, s);
}
Value is 50, 50

More Related Content

What's hot

Razbiraemsya s preobrazovaniem_tipov
Razbiraemsya s preobrazovaniem_tipovRazbiraemsya s preobrazovaniem_tipov
Razbiraemsya s preobrazovaniem_tipovRodion Golovushkin
 
Probabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems DesignProbabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems DesignIosif Itkin
 
01 - Знакомство с Java
01 - Знакомство с Java01 - Знакомство с Java
01 - Знакомство с Javaphearnot
 
Cтиль программирования
Cтиль программированияCтиль программирования
Cтиль программированияConstantin Kichinsky
 
Преобразования типов. Операторы ветвления
Преобразования типов. Операторы ветвленияПреобразования типов. Операторы ветвления
Преобразования типов. Операторы ветвленияIhor Porotikov
 
Основы программирования на ruby
Основы программирования на rubyОсновы программирования на ruby
Основы программирования на rubyEvgeny Smirnov
 
scanf(). Операторы ветвления. Тернарный оператор. switch
scanf(). Операторы ветвления. Тернарный оператор. switchscanf(). Операторы ветвления. Тернарный оператор. switch
scanf(). Операторы ветвления. Тернарный оператор. switchIhor Porotikov
 
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...Iosif Itkin
 
Управляющие структуры в Ruby: условия
Управляющие структуры в Ruby: условияУправляющие структуры в Ruby: условия
Управляющие структуры в Ruby: условияEvgeny Smirnov
 
Динамическое программирование на ruby
Динамическое программирование на rubyДинамическое программирование на ruby
Динамическое программирование на rubyEvgeny Smirnov
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2Zhanna Kazakova
 
манжос мет интервалов
манжос мет интерваловманжос мет интервалов
манжос мет интерваловurvlan
 
A Method of Reducing Computational Complexity in Verification of Programming ...
A Method of Reducing Computational Complexity in Verification of Programming ...A Method of Reducing Computational Complexity in Verification of Programming ...
A Method of Reducing Computational Complexity in Verification of Programming ...Iosif Itkin
 
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...Iosif Itkin
 

What's hot (20)

C# vs C++
C# vs C++C# vs C++
C# vs C++
 
Razbiraemsya s preobrazovaniem_tipov
Razbiraemsya s preobrazovaniem_tipovRazbiraemsya s preobrazovaniem_tipov
Razbiraemsya s preobrazovaniem_tipov
 
Probabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems DesignProbabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems Design
 
01 - Знакомство с Java
01 - Знакомство с Java01 - Знакомство с Java
01 - Знакомство с Java
 
алгоритм
алгоритмалгоритм
алгоритм
 
Data types. Variables
Data types. VariablesData types. Variables
Data types. Variables
 
Java - основы языка
Java - основы языкаJava - основы языка
Java - основы языка
 
Cтиль программирования
Cтиль программированияCтиль программирования
Cтиль программирования
 
Преобразования типов. Операторы ветвления
Преобразования типов. Операторы ветвленияПреобразования типов. Операторы ветвления
Преобразования типов. Операторы ветвления
 
Основы программирования на ruby
Основы программирования на rubyОсновы программирования на ruby
Основы программирования на ruby
 
scanf(). Операторы ветвления. Тернарный оператор. switch
scanf(). Операторы ветвления. Тернарный оператор. switchscanf(). Операторы ветвления. Тернарный оператор. switch
scanf(). Операторы ветвления. Тернарный оператор. switch
 
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
 
Управляющие структуры в Ruby: условия
Управляющие структуры в Ruby: условияУправляющие структуры в Ruby: условия
Управляющие структуры в Ruby: условия
 
Динамическое программирование на ruby
Динамическое программирование на rubyДинамическое программирование на ruby
Динамическое программирование на ruby
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2
 
Ruby строки
Ruby строкиRuby строки
Ruby строки
 
C++ idioms
C++ idiomsC++ idioms
C++ idioms
 
манжос мет интервалов
манжос мет интерваловманжос мет интервалов
манжос мет интервалов
 
A Method of Reducing Computational Complexity in Verification of Programming ...
A Method of Reducing Computational Complexity in Verification of Programming ...A Method of Reducing Computational Complexity in Verification of Programming ...
A Method of Reducing Computational Complexity in Verification of Programming ...
 
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
 

Similar to C language lect_05_introduction

Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2DEVTYPE
 
язык програмирования
язык програмированияязык програмирования
язык програмированияOlegmingalev1997
 
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++Pavel Tsukanov
 
Правила статического анализа кода для диагностики потенциально опасных констр...
Правила статического анализа кода для диагностики потенциально опасных констр...Правила статического анализа кода для диагностики потенциально опасных констр...
Правила статического анализа кода для диагностики потенциально опасных констр...Sergey Vasilyev
 
Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++corehard_by
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаTatyanazaxarova
 
лекции спрг 6_семестр (1)
лекции спрг 6_семестр (1)лекции спрг 6_семестр (1)
лекции спрг 6_семестр (1)djbelyakk
 
Cреда программирования
Cреда программированияCреда программирования
Cреда программированияirina8682
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
 
Что такое size_t и ptrdiff_t
Что такое size_t и ptrdiff_tЧто такое size_t и ptrdiff_t
Что такое size_t и ptrdiff_tTatyanazaxarova
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 

Similar to C language lect_05_introduction (20)

Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2
 
язык програмирования
язык програмированияязык програмирования
язык програмирования
 
паскаль 10кл 14
паскаль 10кл 14паскаль 10кл 14
паскаль 10кл 14
 
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
 
Правила статического анализа кода для диагностики потенциально опасных констр...
Правила статического анализа кода для диагностики потенциально опасных констр...Правила статического анализа кода для диагностики потенциально опасных констр...
Правила статического анализа кода для диагностики потенциально опасных констр...
 
Dsl for c++
Dsl for c++Dsl for c++
Dsl for c++
 
Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметика
 
Programming c++ (begin-if-else)
Programming c++ (begin-if-else)Programming c++ (begin-if-else)
Programming c++ (begin-if-else)
 
лекции спрг 6_семестр (1)
лекции спрг 6_семестр (1)лекции спрг 6_семестр (1)
лекции спрг 6_семестр (1)
 
Cреда программирования
Cреда программированияCреда программирования
Cреда программирования
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
 
Что такое size_t и ptrdiff_t
Что такое size_t и ptrdiff_tЧто такое size_t и ptrdiff_t
Что такое size_t и ptrdiff_t
 
Step 2
Step 2Step 2
Step 2
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 

More from Roman Brovko

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task NetworkingRoman Brovko
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3Roman Brovko
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernetRoman Brovko
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2Roman Brovko
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1Roman Brovko
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flashRoman Brovko
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2CRoman Brovko
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uartRoman Brovko
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorRoman Brovko
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwmRoman Brovko
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsRoman Brovko
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_worldRoman Brovko
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisitesRoman Brovko
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advancedRoman Brovko
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advancedRoman Brovko
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advancedRoman Brovko
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окруженияRoman Brovko
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advancedRoman Brovko
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basicsRoman Brovko
 

More from Roman Brovko (20)

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task Networking
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernet
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flash
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
 
Glesk worshop
Glesk worshopGlesk worshop
Glesk worshop
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensor
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwm
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttons
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_world
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisites
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advanced
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advanced
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advanced
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advanced
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basics
 

C language lect_05_introduction

  • 2. Содержание • Базовые типы данных • Объявления переменных и констант • Преобразования типов 27.09.2021 17:52 Introduction 2
  • 3. Базовые типы данных Тип данных Размер в байтах Диапазон значений char (он же signed char) 1 -128 … 127 unsigned char 1 0 … 255 short (он же signed short) 2 -32 767 … 32 767 unsigned short 2 0 … 65 535 long (он же signed long) 4 -2 147 483 647 … 2 147 483 647 unsigned long 4 0 … 4 294 967 295 long long 8 -(263 - 1) … (263 - 1) unsigned long long 8 0 … (264 - 1) (signed ) int / unsigned int 2 / 4 Размер зависит от разрядности микроконтроллера float 4 1E-37 …1E+37 (точность не менее 6 значащих цифр) double 8 1E-37 …1E+37 (точность не менее 10 значащих цифр) long double 10 1E-37 …1E+37 (точность не менее 10 значащих цифр) bool 1 FALSE (0) или TRUE (1) 27.09.2021 17:52 Introduction 3
  • 5. Объявления переменных Синтаксис <тип данных> <имя переменной> [= значение]; Примеры unsigned char myNewVariable; unsigned char counter = 10; short a,b,c; long long veryBigIntNumber = counter * 5000000; float coef = 1/3; 27.09.2021 17:52 Introduction 5
  • 6. Объявления констант Синтаксис const [тип данных] <имя константы> = <значение>; Примеры const unsigned int maxTemp = 100; const minTemp = 0; 27.09.2021 17:52 Introduction 6 #define или const вот в чем вопрос?
  • 7. Преобразования типов Преобразование значения переменной одного типа в значение другого типа называется приведение типа и бывает явным и неявным: • при явном приведении перед выражением следует указать в круглых скобках имя типа, к которому необходимо преобразовать исходное значение. • при неявном приведении преобразование происходит автоматически, по правилам, заложенным в языке Си. 27.09.2021 17:52 Introduction 7
  • 8. Преобразования типов (правила) Тип преобразуется к наиболее общему из всех операндов. • Если в выражении появляются операнды различных типов, то они преобразуются к некоторому общему типу, при этом к каждому арифметическому операнду применяется такая последовательность правил: • Если один из операндов в выражении имеет тип long double, то остальные тоже преобразуются к типу long double. • В противном случае, если один из операндов в выражении имеет тип double, то остальные тоже преобразуются к типу double. • В противном случае, если один из операндов в выражении имеет тип float, то остальные тоже преобразуются к типу float. • В противном случае, если один из операндов в выражении имеет тип unsigned long, то остальные тоже преобразуются к типу unsigned long. • В противном случае, если один из операндов в выражении имеет тип long, то остальные тоже преобразуются к типу long. • В противном случае, если один из операндов в выражении имеет тип unsigned, то остальные тоже преобразуются. к типу unsigned. • В противном случае все операнды преобразуются к типу int. При этом тип char преобразуется в int со знаком; тип unsigned char в int, у которого старший байт всегда нулевой; тип signed char в int, у которого в знаковый разряд передается знак из сhar; тип short в int (знаковый или беззнаковый). 27.09.2021 17:52 Introduction 8
  • 9. Пример #1 Явное приведение типа unsigned char a; unsigned long b; float c; a = 10; b = (unsigned long)a; c = (float)b; 27.09.2021 17:52 Introduction 9 Неявное приведение типа unsigned char a; unsigned long b; float c; с = 1000.5; b = с; a = b;
  • 10. Пример #2 27.09.2021 17:52 Introduction 10 int main() { int i = 1000000; char c = i; printf("Value is %d", c); return 0; }
  • 11. Пример #2 27.09.2021 17:52 Introduction 11 int main() { int i = 1000000; char c = i; printf("Value is %d", c); return 0; } Value is 64
  • 12. Пример #3 27.09.2021 17:52 Introduction 12 int main() { int i = 8; int j = 3; float f_res = i / j; printf("Result is %.10f", f_res); }
  • 13. Пример #3 27.09.2021 17:52 Introduction 13 int main() { int i = 8; int j = 3; float f_res = i / j; printf("Result is %.10f", f_res); } Result is 2.0000000000
  • 14. Пример #3 27.09.2021 17:52 Introduction 14 Result is 2.6666667461 int main() { int i = 8; int j = 3; float f_res = (float) i / (float) j; printf("Result is %.10f", f_res); }
  • 15. Пример #4 27.09.2021 17:52 Introduction 15 int main() { unsigned int i = 65535; unsigned char c = i; unsigned int j = c; printf("Value i=%u, c=%u, j=%u", i, c, j); }
  • 16. Пример #4 27.09.2021 17:52 Introduction 16 int main() { unsigned int i = 65535; unsigned char c = i; unsigned int j = c; printf("Value i=%u, c=%u, j=%u", i, c, j); } Value i=65535, c=255, j=255
  • 17. Пример #5 27.09.2021 17:52 Introduction 17 int main() { unsigned int i = 65535; unsigned long long j = i; printf("Value is %u, %llu", i, j); }
  • 18. Пример #5 27.09.2021 17:52 Introduction 18 int main() { unsigned int i = 65535; unsigned long long j = i; printf("Value is %u, %llu", i, j); } Value is 65535, 65535
  • 19. Пример #6 27.09.2021 17:52 Introduction 19 int main() { unsigned char i = 250; signed char s = i; printf("Value is %d, %d", i, s); }
  • 20. Пример #6 27.09.2021 17:52 Introduction 20 int main() { unsigned char i = 250; signed char s = i; printf("Value is %d, %d", i, s); } Value is 250, -6
  • 21. Пример #7 27.09.2021 17:52 Introduction 21 int main() { unsigned char i = 50; signed char s = i; printf("Value is %d, %d", i, s); }
  • 22. Пример #7 27.09.2021 17:52 Introduction 22 int main() { unsigned char i = 50; signed char s = i; printf("Value is %d, %d", i, s); } Value is 50, 50

Editor's Notes

  1. Размер переменных в си не определён явно, как размер в байтах. В стандарте только указано, что char <= short <= int <= long <= long long
  2. MISRA C — стандарт разработки программного обеспечения на языке Си, разработанный MISRA (Motor Industry Software Reliability Association). Цель стандарта — улучшить безопасность, переносимость и надежность программ для встраиваемых систем. Это набор ужесточающих правил для языка Си. Также существует набор похожих руководящих принципов для языка C++ под названием MISRA C ++. В настоящее время стандарты MISRA используются не только в автомобильной индустрии, но также и в аэрокосмической, телекоммуникационной, разработке медицинских устройств, военных проектах, и других…
  3. Для хранения различных данных в языках программирования используют переменные. Переменной называется область памяти, имеющая имя, которое иначе называют идентификатором. При объявлении переменной компилятор отводит ей место в памяти в зависимости от её типа. Давая переменной имя, программист одновременно тем же именем называет и область памяти, куда будут записываться значения переменной для хранения. Хорошим стилем является осмысленное именование переменных. Разрешается использовать строчные и прописные буквы, цифры и символ подчёркивания, который в Си считается буквой. Первым символом обязательно должна быть буква, в имени переменной не должно быть пробелов. В современных версиях компиляторов длина имени практически не ограничена. Имя переменной не может совпадать с зарезервированными ключевыми словами. Заглавные и строчные буквы в именах переменных различаются, переменные a и A — разные переменные. Вопросы к аудитории: - чему равно значение myNewVariable.
  4. Переменная любого типа может быть объявлена как немодифицируемая. Это достигается добавлением ключевого слова const к спецификатору типа. Переменные с типом const представляют собой данные, используемые только для чтения, то есть этой переменной не может быть присвоено новое значение. Если после слова const отсутствует спецификатор типа, то константы рассматриваются как величины со знаком, и им присваивается тип int или long int в соответствии со значением константы. Преимущества const по сравнению с #define
  5. Тип преобразуется к наиболее общему из всех операндов. Если в выражении появляются операнды различных типов, то они преобразуются к некоторому общему типу, при этом к каждому арифметическому операнду применяется такая последовательность правил: Если один из операндов в выражении имеет тип long double, то остальные тоже преобразуются к типу long double. В противном случае, если один из операндов в выражении имеет тип double, то остальные тоже преобразуются к типу double. В противном случае, если один из операндов в выражении имеет тип float, то остальные тоже преобразуются к типу float. В противном случае, если один из операндов в выражении имеет тип unsigned long, то остальные тоже преобразуются к типу unsigned long. В противном случае, если один из операндов в выражении имеет тип long, то остальные тоже преобразуются к типу long. В противном случае, если один из операндов в выражении имеет тип unsigned, то остальные тоже преобразуются. к типу unsigned. В противном случае все операнды преобразуются к типу int. При этом тип char преобразуется в int со знаком; тип unsigned char в int, у которого старший байт всегда нулевой; тип signed char в int, у которого в знаковый разряд передается знак из сhar; тип short в int (знаковый или беззнаковый).
  6. Какие значения a,b,c будут на выходе?