Язык программирования Си. Глава(Chapter) 3
Tags: c, russian
Published: 2022-06-24 17:51:37

**1.** Бит(_Bit_), байт(_Byte_) или октет(_Octet_) и машинное слово(_Word_).
![Word](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5lhzibr6wmcl9hvvx5k9.png)

**2.** Различие инициализации(_Initialization_) и присваивания(_Assignment_), пример:
```c
int num = 2; //initializing variable num with literal 2
num = 4; //assigning literal 4 to variable num
```

**3.** Литералы(_Literals_), то есть константы(_Constants_), их суффиксы(_Suffixes_), для уточнения типа(_Type_) и их стандартная(_Default_), то есть десятичная(_Decimal_) запись и запись в восьмеричном(_Octal_) или шестнадцатеричном(_Hexadecimal_) форматах, с префиксами(_Prefixes_) `0` и `0x` соответственно, пример:
```c
16; //decimal int literal
016; //octal int literal, 14 in decimal
16LL; //decimal long long int literal
0x16ULL; //hexadecimal unsigned long long literal, 22 in decimal
16.0L; //decimal long double literal
.16E-2F; //decimal float literal in scientific notation, 0.0016
```

**4.** Форматирующие(_Formatting_) функции ввода и вывода(_Input and Output_) `scanf()` и `printf()`:
   - фактические аргументы(_Actual Arguments_), первым указывается всегда управляющая строка(_Control String_), пример: `"num = %d"`; а потом переменное количество аргументов(_Variable Length Arguments_);
   - вывод непечатаемых символов(_Nonprinting Characters_) управляющими последовательностями(_Escape Sequences_), пример: `"Have you read the book \"Harry Potter\"\?"`;
   - cпецификаторы и модификаторы преобразования(_Format Specifiers and Their Modifiers_), иначе интерпретации переменных, пример: `"%.5a + %hd = %lf"`;
   - флаги(_Flags_), пример: `"%+g"` и `"%#p"`.

Примеры форматированного вывода:
```c
printf("|%-10hd|\n", (short)12); //left justification(-), fixed space for 10 symbols(10), short(h), int(d)
printf("|%-+8.3Lf|\n", 3.6L); //forcing to precede with sign(+), 3 digits after decimal point(.3), long double(Lf)
printf("|%#.0e|\n", 3.); //print decimal point even if there are no digits after it(#), float in scientific notation(e)
printf("|%#x|\n", 0x1a); //print prefix 0x(#), hexadecimal number(x)
printf("|% zd|\n", sizeof(int)); //reserving space intended for negative sign( ), size_t(zd)
printf("|%8jX|\n", (long long)0X3CA0F); //intmax_t(j), hexadecimal number in uppercase(X)
printf("|%5.3ti|\n", ptrtoint2 - ptrtoint1); //ptrdiff_t(t), int(i)
printf("|%-8.5s|\n", "C language"); //printing 5 characters(.5), *char(s)
printf("|%#*.*o|\n", width, digits, 016); //print prefix 0(#), variable specified width and presicion(*.*), octal number(o)
printf("|C la%2$nnguage|%1$s", "\n", &printed_symbols); //number of argument(2$, 1$), amount of printed symbols(n)
scanf("%*s %d", &num); //ignore input string(*)
```

**5.** Базовые типы данных(_Basic Data Types_):
   - Целочисленные(_Integer_) переменные и их минимальные размеры;
   - Вещественные(_Real_) числа, состоящие из знакового бита(_Sign Bit_), экспоненты(_Exponent_) и мантиссы(_Mantissa_) или значащей части(_Significant Value_);
   - Переносимые(_Portable_) или не зависящие от реализации(_Implementation-independent_) типы в `stdint.h`, пример: `int32_t`, `intmax_t`, `int_least8_t`, `int_fast16_t`; и макросы в `inttypes.h`, пример: `"num = %" PRId32`;
   - Символьные типы `char` и `unsigned char` в ASCII таблица(_Table_), также типы `_Bool` - `bool` в `stdbool.h`; `_Complex` и `_Imaginary` - `complex` и `imaginary` в `complex.h`.
![Floating Point To Decimal](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/59bd6kd9vzf5rr3k16a3.png)

**6.** Ошибки округления данных с плавающей запятой(_Floating-Point Round-off Errors_), проблема переполнения(_Overflow_) со значением `INF` и проблема потери значимости(_Underflow_), субнормальные(_Subnormal_) числа и значение `NaN`.

```c
printf("%.10f = %.10f\n", 0.3f * 3, .9f); //round-off error
printf("%.10e\n", 3.402823e38f * 2); //overflow
printf("%f\n", 500000000.f + 3.0f); //underflow
printf("%E\n", 1.40129846E-45F / 2); //subnormal number
//asin() function in <math.h>
printf("%f\n", asin(2.0)); //NaN - not a number
```

> Язык программирования Си 6 издание. Стивен Прата
> C Primer Plus 6th edition. Stephen Prata