1. Бит(Bit), байт(Byte) или октет(Octet) и машинное слово(Word).
2. Различие инициализации(Initialization) и присваивания(Assignment), пример:
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
соответственно, пример:
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"
.
Примеры форматированного вывода:
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
.
6. Ошибки округления данных с плавающей запятой(Floating-Point Round-off Errors), проблема переполнения(Overflow) со значением INF
и проблема потери значимости(Underflow), субнормальные(Subnormal) числа и значение NaN
.
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
Top comments (0)