Введите с клавиатуры два числа и сложите их выведите результат на экран
Задание:
1) Вывести на экран сумму двух введённых с клавиатуры цифр (значение вводить так чтобы сумма была меньше 10)
2) Имеется два числа (цифры a и b). Вычислить y=2*a-b+1
Данную задачу нужно сделать по этому материалу:
Практика №1
Постановка задачи
1. Постановка задачи. Написать программу, которая выводит на экран строчку "hello"2. Разработка алгоритма программы. Алгоритм линейный, разработки не требует.
3. Формализация (запись алгоритма). В текстовом редакторе создаём файл (файл "privet.asm) и записываем в него следующий код
1) data segment (описание сегмента данных)
2) mes db 'Hello!$' (строка для вывода на экран. '$' -признак конца строки)
3) data ends (конец сегмента данных)
4)
5) code segment (начало сегмента кода)
6) start: (метка start - начало нашей программы )
7) assume cs:code, ds: data (директива компилятора)
8) mov ax, data (настройка сегментов данных)
9) mov ds, ax
10)
11) mov ah, 9 (функция №9 - вывод строки на экран)
12) lea dx, mes (берём адрес строки)
13) int 21h (вызов прерывания для вывода строки)
14)
15) mov ax, 4c00h (функция завершения программы)
16) int 21h (завершаем программу)
17) code ends (конец сегмента кода)
18) end start (конец программы с точки входа start)
4. Компиляция программы tasm privet.asm
5. Компановка программы tlink privet.obj
6. Запуск privet.exe
Строки 1-3 программы privet.asm содержит описание сегмента данных. Сегмент данных - область память, в которой будет храниться данные для наших программ.
Строки 5-17 - это код программы, её исполняемая часть.
В 8 и 9 строках выполняется настройка сегмента данных программы.
Строки 11-13 - вывод строки на экран при помощи функции №9 прерывания 21h
15 и 16 строки - стандартное завершение программы.
После символа ";" пишутся комментарии, они не обрабатываются компилятором.
Переход на новую строку. mes db 'Выводим строку и переходим на новую..', 10, 13, '$'
Применение функции DOS и BIOS.
Пример 1: Вывести на экран символ $
mov ah, 02 (номер функции)
mov dl, '$' (входные данные)
int 21h (вызов прерываний)
Пример 2: Очистить экран
mov ah, 0fh (получить параметры видеорежима)
int 10h
mov ah, 00 (установить параметры видеорежима)
int 10h
Пример 3: Установить курсор
mov ah, 02h (функция
mov bh, 00h (видео страница 0)
mov dh, 05h (номер строки 5)
mov dl, 0ch (номер столбца 12)
int 10h (вызов прерываний)
Пример 4: Ввод с клавиатуры и чтение с клавиатуры
mov ah, 1
int 21h
Пример 5: Вывод символов на экран
mov ah, 2
mov dl, dl (поместить символ из ah в dl)
int 21h(10h) (отобразить символ)
Лабораторная работа №4
Линейным называют такие алгоритмы, в которых все действия выполняются поочередно, друг за другом.
На линейных участках алгоритмов обычно выполняются манипуляции данными
mov <приёмник>, <источник>
Команда mov - команда пересылки данных, результатом Ее исполнения является копирование данных из операнда <источник> в операнд <приёмник>
mov ah, 09 (записать в регистр ah число 09)
mov cl, ah (скопировать байт из регистра ah в ch)
mov bx, cx (скопировать слово из регистра cx в регистр bx)
mov ch, 0fh
mov ch, bl
Вопрос: чему будет равно содержимое регистра ch после выполнения данного участка программы?
Команда | Описание
add <слагаемое 1>, <слагаемое 2> | Записать в операнд <слагаемое 1> значение суммы обоих операндов
inc <операнд> | Увеличить <операнд> на единицу
sub <операнд 1>, <операнд 2> | Записать в операнд <операнд 1> значение разности операндов
dec <операнд> | Уменьшить <операнд> на единицу
mul <сомножитель 2> | Умножает <сомножитель1> на <сомножитель 2> если <сомн2> - байт, то <сомн1> - регистр al (результат-слово в ax); Если <сомн2> - слово, то <сомн1> - регистр ax (результат - двойное слово в dx:ax)
div <делитель> | Делит <делимое> на <делитель> если <делитель> - байт, то <делимое> - регистр ax (результат - частное в al, остаток в ah); если <делитель> - слово, то <делимое> - регистр овая пара dx:ax (результат - частное в ax, остаток в dx)
Пример 1
data segment
N db 4
F db 5
Y db (dw) ?
-------------(тут должен быть код)
start :
----(тут должен быть код)
mov dx, [N]
add dx, 2
sub dx, [F]
------(тут должен быть код)
mov Y, dx
-----(тут должен быть код)
В начале dx загружается значение 4, хранящиеся N затем к нему добавляется константа 2. В результате в dx значение 6. Далее из dx вычитается значение 5 хранящиеся в F, далее из dx результат загружается в Y
Постановка задачи 1. Постановка задачи. Написать программу, которая выводит на экран строчку "hello" 2. Разработка алгоритма программы. Алгоритм линейный, разработки не требует. 3. Формализация (запись алгоритма). В текстовом редакторе создаём файл (файл "privet.asm) и записываем в него следующий код 1) data segment (описание сегмента данных) 2) mes db 'Hello!$' (строка для вывода на экран. '$' -признак конца строки) 3) data ends (конец сегмента данных) 4) 5) code segment (начало сегмента кода) 6) start: (метка start - начало нашей программы ) 7) assume cs:code, ds: data (директива компилятора) 8) mov ax, data (настройка сегментов данных) 9) mov ds, ax 10) 11) mov ah, 9 (функция №9 - вывод строки на экран) 12) lea dx, mes (берём адрес строки) 13) int 21h (вызов прерывания для вывода строки) 14) 15) mov ax, 4c00h (функция завершения программы) 16) int 21h (завершаем программу) 17) code ends (конец сегмента кода) 18) end start (конец программы с точки входа start) 4. Компиляция программы tasm privet.asm 5. Компановка программы tlink privet.obj 6. Запуск privet.exe Описание программы privet.asm Строки 1-3 программы privet.asm содержит описание сегмента данных. Сегмент данных - область память, в которой будет храниться данные для наших программ. Строки 5-17 - это код программы, её исполняемая часть. В 8 и 9 строках выполняется настройка сегмента данных программы. Строки 11-13 - вывод строки на экран при помощи функции №9 прерывания 21h 15 и 16 строки - стандартное завершение программы. После символа ";" пишутся комментарии, они не обрабатываются компилятором. Переход на новую строку. mes db 'Выводим строку и переходим на новую..', 10, 13, '$' Лабораторная работа №3 Применение функции DOS и BIOS. Пример 1: Вывести на экран символ $
Задания 1) В центне чистого экрана вывести слово hello 2) Вывести приглашение к вводу символа, ввести символ, вывести введённый символ в центре очищенного файла. Лабораторная работа №4 Линейный алгоритм Лийненым называют такие алгоритмы, в которых все действия выполняются поочередно, друг за другом. На линейных участках алгоритмов обычно выполняются манипуляции данными Команда пересылки данных: mov <приёмник>, <источник> Команда mov - команда пересылки данных, результатом Ее исполнения является копирование данных из операнда <источник> в операнд <приёмник> Вопрос: чему будет равно содержимое регистра ch после выполнения данного участка программы? Простейшие арифметические команды: Команда | Описаниеadd <слагаемое 1>, <слагаемое 2>
| Записать в операнд <слагаемое 1> значение суммы обоих операндов
| Увеличить <операнд> на единицу
sub <операнд 1>, <операнд 2>
| Записать в операнд <операнд 1> значение разности операндов
| Уменьшить <операнд> на единицу
mul <сомножитель 2>
| Умножает <сомножитель1> на <сомножитель 2> если <сомн2> - байт, то <сомн1> - регистр al (результат-слово в ax); Если <сомн2> - слово, то <сомн1> - регистр ax (результат - двойное слово в dx:ax)
| Делит <делимое> на <делитель> если <делитель> - байт, то <делимое> - регистр ax (результат - частное в al, остаток в ah); если <делитель> - слово, то <делимое> - регистр овая пара dx:ax (результат - частное в ax, остаток в dx) Пример 1
На этом занятии мы научимся читать, писать и считать (в целых числах). Как первоклассники, только на компьютере, с помощью С++.
Домашнее задание:
Обязательное задание:
1) Выполнить все задания из турнира "02. Целые числа - 1" (Если есть не выполненные) (http://contester.petrocollege.ru:8888/ru/)
2) Выполнить все задания из турнира "03. Целые числа - 2"
3) Выполнить задания из турнира "04. Целые числа - 3"
1. Арифметические выражения
Сначала научимся считать. Мы уже знаем, что выводить строки можно с помощью команды cout. Точно так же можно выводить числа и результат вычисления выражений. Например, вот так выглядит программа, которая считает, чему равно (2 + 3) * 5:
Если запустить эту программу, то она выведет 25. Сначала посчитается результат вычисления арифметического выражения, а затем он будет выведен. Посмотрим, какие арифметические операции умеет выполнять C++:
У операций на C++ тот же приоритет, что и в обычной математике. Сначала выполняются унарные операции (увеличить на 1 и уменьшить на 1), потом бинарные умножение, деление и вычисление остатка, затем бинарные сложение и вычитание. Влиять на порядок операций можно с помощью скобок. Минус и плюс бывают бинарные (это число минус число или число плюс число) и унарные (это просто отрицательное или положительное число). Например, можно написать (−2 + 3) * 4 — это будет корректным выражением с результатом 4.
Гораздо интереснее операции деления и взятия остатка. С помощью операции деления можно узнать целую часть от деления одного числа на другое. Например, 7 / 3 будет равно 2. А с помощью операции взятия остатка от деления можно узнать остаток от деления первого числа на второе. 7 % 3 будет равен 1. Если число делится нацело, то остаток будет равен нулю, например, 8 % 4 даст 0.
Математикам стоит обратить внимание на то, что деление и подсчёт остатка для отрицательных чисел работает в C++ «неправильно». Если в C++ мы разделим отрицательное число на положительное, например, посчитаем результат операции −7 / 3, то получим −2. Фактически в C++ отрицательное число берётся по модулю, делится, а затем к результату приписывается минус.
В C++ операция взятия остатка от деления отрицательного числа на положительное, так же как и деление нацело, берёт делимое по модулю, затем происходит подсчёт остатка от деления, и к результату приписывается минус. Например, −10 % 3 будет равно −1.
При возведении в степень целых чисел (если значение степени не большое, например в квадрат или в куб) следует использовать умножение, например:- a 2 = a ∗ a
- a 3 = a ∗ a ∗ a
- ( a + b ) 4 = ( a + b ) ∗ ( a + b ) ∗ ( a + b ) ∗ ( a + b )
Программа, которая всегда считает результат вычисления одного и того же выражения, довольно скучная и бестолковая. Полезная программа должна оперировать с различными данными без внесения изменений в код.
Можно представить себе, что программа сидит в кабинете, в который входит конвейер с входными значениями (это поток cin), а выходит конвейер с выводом (это поток cout). В кабинете стоят коробки с хламом, оставшемся от предыдущих жильцов, но мы можем ими воспользоваться, чтобы хранить в этих коробках свои вещи. Переменная, по сути, и является такой коробкой. «Объявить переменную x» — это как взять какую-нибудь из коробочек и подписать её буквой x. «Присвоить значение переменной x» — это вытряхнуть содержимое из коробочки x и положить в неё новое значение.
Пока мы будем работать только с целочисленными переменными. Пусть мы хотим взять из горы неподписанных специальных коробочек для целых чисел две штуки и назвать их x и y. На языке C++ это будет записано как:
Слово int означает, что переменные будут целочисленные, затем перечисляются имена создаваемых переменных через запятую. В конце ставится точка с запятой.
Если мы хотим присвоить значение переменной, то слева следует написать имя присваиваемой переменной, затем знак равно, а справа — арифметическое выражение, в котором могут использоваться числа и другие переменные. Например:
В результате выполнения этих операций в переменной x окажется число 5, а в переменной y — число 20.
Переменные также можно считывать с клавиатуры. Для этого по аналогии с потоком вывода cout используется поток cin (console input). Этот как раз тот конвейер, по которому к нам приезжают числа. Как и в случае cout, вводимые значения разделяются стрелочками, только теперь они направлены вправо, так как мы забираем данные из потока cin.
Задача 1. Ввести одно число и вывести это число, увеличенное на 1.
Добавим строчки ввода и вывода данных. Данная программа при запуске откроет консоль и будет ожидать, пока пользователь не наберёт целое число. После нажатия клавиши Enter число будет размещено в переменной a. Далее оно увеличится на единицу и будет выведено обратно на консоль:
Обратите внимание, что при чтении из cin стрелочки направлены в противоположную по сравнению с cout сторону. Мы «забираем» данные из потока ввода cin и «кладём» в cout .
Задача 2. Ввести с клавиатуры два числа и вывести их сумму.
Рассмотрим теперь пример программы, которая считывает с клавиатуры два числа a и b и выводит на экран их сумму:
Данная программа при запуске откроет консоль и будет ожидать, пока пользователь не наберёт два целых числа, разделённых пробелом или переводом строки (нажатием Enter). После нажатия клавиши Enter первое число будет размещено в переменной a , а второе число - в переменной b . Далее будет выведена на консоль сумма этих двух чисел.
Обратите внимание, что если мы хотим считать несколько переменных, то при перечислении их следует разделять стрелочками. Строку
можно заменить строками
которые будут делать то же самое.
Задача 3. Ввести с клавиатуры три числа и вывести суммы первого и второго чисел, первого и третьего, второго и третьего, сумму всех трех чисел и их произведение.
Следующая программа запрашивает три целых числа a , b, c . Программа в первой строке выводит сумму a +b , во второй строке a +c , в третьей строке b +c , в четвёртой, через пробел сумму всех трёх переменных и их произведение:
В C++ на целые числа типа int отводится 4 байта (32 бита). А это значит, что различных целых чисел может быть только 2 32 . Числа могут принимать значения от −2 31 до 2 31 −1 (это примерно от минус двух миллиардов до двух миллиардов). Если в процессе вычислений произойдёт выход за эти пределы, то результат будет посчитан неверно. Использование принципиально больших чисел требует ухищрений, поэтому в наших задачах все числа и все правильные промежуточные вычисления не будут выходить за эти пределы.
3. Изощрённый вывод
В cout также можно класть несколько значений, причём числа и строки могут идти вперемешку. Рассмотрим это на примере.
Задача 4. Ввести два числа и вывести их сумму и разность в виде арифметических выражений.
Пусть нам нужно считать два числа и вывести их сумму и разность в виде арифметического выражения, каждое в отдельной строке. Решение этой задачи выглядит так:
Если ввести числа 1 и 2, то на экран будет выведено:
1 + 2 = 3 1 - 2 = -1
Все различные значения, которые мы хотим вывести с помощью cout, следует разделять стрелочками <<. На место переменных и арифметических выражений будет подставлено их значение, а всё, что выводится в кавычках, останется без изменения. Особого внимания заслуживает слово endl — так в C++ делается переход на новую строку.
Если вы выводите несколько чисел, то обязательно добавляйте между ними пробел, иначе они склеятся и ответ будет неправильным.
Задача 5. Предположим, пассажир самолёта перепутал дверь туалета с выходом и случайно вышел на высоте. Приземлился он через t секунд, и нужно определить, на какой высоте летел самолёт.
Эту задачу можно решать так, как обычно решаются задачи по физике. Ускорение свободного падения нам известно (поскольку наши числа целые, то мы возьмём его равным 10). Мы посчитаем скорость (v), на которой пассажир достиг земли, затем среднюю скорость (vm, это конечная скорость, поделенная на 2) и, зная среднюю скорость и время, легко рассчитаем расстояние.
В этом решении мы заводили переменные там, где они нам понадобились впервые, а также сразу клали в переменную заданное число при её создании.
Задача 6. Написать программу, которая запрашивает шестиразрядное число и выводит только его три старших разряда.
Рассмотрим упрощенный вариант задачи: Вводится двузначное число. Вывести его старший разряд. Например, вводим число 49. Тогда старший разряд - это 4. Как его определить? В двузначном числе старший разряд - это разряд десятков, и для того, чтобы его найти, достаточно разделить исходное число на 10 (с учетом, что у нас есть операция целочисленного деления /). 49 / 10 = 4, что и требовалось получить. Если вводится трехзначное число и нужно получить два старших разряда, то разделив его снова на 10, мы как раз и получим уже два разряда. Например, вводим 395, делим на 10: 395 / 10 = 39, получаем два старших разряда. В нашем задании вводится шестизначное число, требуется получить три старших разряда. Тогда по аналогии: 123456 / 1000 = 123 Задача 7. Д аны два числа a и b , причём b > 0 . Надо посчитать целую часть от деления a на b , округлённую вверх.Рассмотрим, как решить совсем простую на первый взгляд задачу, которая превращается в достаточно сложную из-за того, что мы мало что умеем и знаем. Напомню, что при делении C++ округляет результат вниз, не так, как нам нужно.
Первая идея — разделить с округлением вниз и прибавить к результату единицу. Эта идея неправильная: она не работает, если одно число делится на другое нацело. Так 8 / 2 + 1 будет равно 5, хотя правильный ответ 4.
Следующая идея, правильная, — прибавить к числу что-нибудь и затем разделить его с округлением вниз. Осталось понять, что же нужно прибавлять к числу. Если число a делится на b нацело, то результат не должен изменяться, значит, нельзя прибавлять к числу a что-либо большее b − 1 (если прибавить больше, то результат деления получится уже больше правильного). Можно ли прибавить что-нибудь меньшее b − 1? Рассмотрим «худший» случай, когда остаток от деления a на b равен единице, например, a = 11, b = 5. Тогда мы сложим a и b − 1 (получим 15) и разделим на 5 — получится правильный ответ 3.
Наше решение будет работать и для отрицательных чисел за счёт особенностей деления на C++. Полный код решения выглядит так:
6. Как решать задачи в проверочной системе Contester
У каждой задачи в вашем домашнем задании в системе проверки Contester есть условие, формат входных и выходных данных и примеры. В условии содержится описание задачи, которую нужно решить. В формате входных данных сказано, какие числа вводятся и в каком порядке они даны, а также указаны ограничения на эти числа. Гарантируется, что чисел будет столько, сколько нужно, и они будут удовлетворять ограничениям. Вам нужно решить задачу только для указанных ограничений. Как программа будет работать для чисел, не удовлетворяющих ограничениям — абсолютно неважно, таких тестов не будет. В формате выходных данных указывается, что и в каком порядке программа должна выводить — ничего, кроме этого, в решении быть не должно.
Примеры к задаче нужны для лучшего понимания условия и первоначальной самопроверки. Естественно, программа должна работать не только на примерах, но и на любых других допустимых входных данных.
Если программа работает правильно, то она получит статус OK. Если программа получила другой статус — вам следует придумать тесты, удовлетворяющие ограничениям, и проверить работу своей программы. Обязательно найдётся ошибка. Наша тестирующая система работает правильно. Наши тесты правильные. Правильные ответы к нашим тестам правильные. Это точно. Мы проверяли много раз. И не только мы.
7. Правила оформления кода
Программы нужно писать красиво, иначе их будет неудобно читать. На реальной работе программы много раз читаются и переписываются другими людьми, поэтому соблюдать правила оформления кода очень важно. Если в общем, то главное правило — «делайте как в образце». Если конкретно:
1. После открывающейся фигурной скобки добавляется отступ в начале строки, на строке с закрывающейся фигурной скобкой отступ убирается.
2. Все бинарные операции (+,−, *, /, %, =, <<, >>) окружаются пробелами.
3. После унарного минуса пробел не ставится (−5 нужно писать слитно).
4. Перед знаками препинания (запятая и точка с запятой) пробел не ставится, после — ставится.
5. После открывающейся и перед закрывающейся круглой скобкой пробел не ставится.
6. Если в условии задачи сказано «на вход даются два числа A и B», то переменные, в которые считываются эти числа, должны называться так же, но маленькими буквами (a и b соответственно).
Ваши коллеги будут очень благодарны вам, если вы будете соблюдать правила оформления кода.
За ввод в программу данных с клавиатуры в Python отвечает функция input() . Когда вызывается эта функция, программа останавливает свое выполнение и ждет, когда пользователь введет текст. После этого, когда он нажмет Enter, функция input() заберет введенный текст и передаст его программе, которая уже будет обрабатывать его согласно своим алгоритмам.
Если в интерактивном режиме ввести команду input() , то ничего интересного вы не увидите. Компьютер будет ждать, когда вы что-нибудь введете и нажмете Enter или просто нажмете Enter . Если вы что-то ввели, это сразу же отобразиться на экране:
Функция input() передает введенные данные в программу. Их можно присвоить переменной. В этом случае интерпретатор не выводит строку сразу же:
В данном случае строка сохраняется в переменной answer, и при желании мы можем вывести ее значение на экран.
Куда интересней использовать функцию input() в скриптах – отдельно взятых файлах с кодом. Рассмотрим такую программу:
При запуске программы, компьютер ждет, когда будет введена сначала одна строка, потом вторая. Они будут присвоены переменным nameUser и user_city . После этого значения этих переменных выводятся на экран с помощью форматированного вывода:
Вышеприведенный скрипт далек от совершенства. Откуда пользователю знать, что хочет от него программа? Чтобы не вводить в замешательство многозадачного биоробота, для функции input() предусмотрен специальный параметр-приглашение. Это приглашение выводится на экран при вызове input() . Усовершенствованная программа может выглядеть так:
Результат выполнения получиться следующий:
Обратите внимание, что в программу поступает строка. Даже если ввести число, функция input() все равно вернет его строковое представление. Но что делать, если надо получить число? Ответ: использовать функции преобразования типов:
Результат выполнения может быть следующий:
В данном случае с помощью функций int() или float() строковые значения переменных number_1 и number_2 преобразуются соответственно в целое число или дробное число. После этого новые численные значения присваиваются тем же переменным.
Напишите программу, которая запрашивала бы у пользователя:
- его имя (например, «What is your name?»)
- возраст («How old are you?»)
- место жительства («Where do you live?»)
После этого выводила бы три строки:
Значения имя , возраст , место_жительства - произвольные, вводимые пользователем.
Напишите программу, которая предлагала бы пользователю ввести три числа, а затем решить пример составленный из введенных чисел. Потом выводила бы на экран правильный ответ и ответ пользователя. Пример должен вычисляться. Подумайте, нужно ли здесь преобразовывать строку в число.
Результат выполнения может быть следующий:
Другой пример выполнения этой же программы:
Запросите у пользователя четыре числа. Отдельно сложите первые два, отдельно вторые два числа и выведите суммы. Разделите первую сумму на вторую и выведите результат на экран.
1 Потоковый ввод/вывод
Эти объекты называются потоками ввода/вывода. В дальнейших уроках мы узнаем и о других разновидностях таких потоков. Потоковый ввод/вывод осуществляется операциями >> и << соответственно. Использовать их можно следующим образом:
В этой программе создается 3 переменных целого типа данных ( int ), в конце урока приведена более подробная информация об этом и других стандартных типах. Тут, как и в hello world использолся вызов функции std::cin.get() для задержки закрытия окна. На самом деле эта функция ( get ) ожидает ввода символа пользователем.
Объект std::cin является потоком ввода, к нему можно применять оператор >> для получения значений переменных с клавиатуры:
Теперь значения переменных задаются не программистом, а пользователем (в процессе использования программы).
С помощью объекта cin и операции >> можно присвоить значение любой переменной. Например, если переменная x описана как целочисленная, то команда cin>>x; означает, что в переменную x будет записано некое целое число, введенное с клавиатуры. Если необходимо ввести несколько переменных, то можно написать:
cin >> x >> y >> z; .
2 Основные операции над числами
Директива using namespace std; сообщает компилятору, что в этом месте вы используете имена из пространства имен std , за счет нее вы, в частности, можете писать cout или cin вместо std::cout и std::cin . Тему пространств имен мы подробно изучим в следующих уроках.
Теперь рассмотрим изученное на примере более сложной задачи (наконец, заставим наш компьютер посчитать что-нибудь полезное):
Известны плотность p , высота h и радиус основания R цилиндрического слитка.
Найти объем V , массу m и площадь S основания слитка.
Составим текст программы, учитывая что:
$$S = \pi \cdot R \cdot R, \\
V = S \cdot h,\\
m = p \cdot V.$$
Результаты работы программы:
Исследуя эту программу, обратите внимание на:
3 Справочный материал
3.1 Переменные и типы данных
Переменная это область памяти заполненная данными, которые называются значением переменной. У каждой переменной должно быть своё уникальное имя на латинице с учетом регистра. Переменные делятся на целочисленные, дробные, символьные, логические (т.е «да» или «нет»).
Для решения задачи в любой программе выполняется обработка каких-либо данных. К основным типам данных языка C++ относят:
Для формирования других типов данных используют основные и так называемые спецификаторы:
- short — короткий;
- long — длинный;
- signed — знаковый;
- unsigned — беззнаковый.
- const — константа.
В таблице приведена справочная информация о различных комбинациях типов данных с учетом спецификаторов для операционной системы Windows:
Имя типа | Размер (в байтах) | Диапазон значений |
---|---|---|
int (signed int) | 4 | От -2 147 483 648 до 2 147 483 647 |
unsigned int | 4 | От 0 до 4 294 967 295 |
bool | 1 | false или true |
char (unsigned char) | 1 | -128 до 127 знаков по умолчанию |
signed char | 1 | От -128 до 127 |
unsigned char | 1 | От 0 до 255 |
short (signed short) | 2 | От -32 768 до 32 767 |
unsigned short | 2 | От 0 до 65 535 |
long (signed long) | 4 | От -2 147 483 648 до 2 147 483 647 |
unsigned long | 4 | От 0 до 4 294 967 295 |
long long (signed long long) | 8 | От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
unsigned long long | 8 | От 0 до 18 446 744 073 709 551 615 |
float | 4 | 3,4E +/- 38 (7 знаков) |
double (long double) | 8 | 1,7E +/- 308 (15 знаков) |
wchar_t | 2 | От 0 до 65 535 |
Переменная типа bool может принимать только два значения true (истина) или fasle (ложь), тем не менее, в памяти занимает не 1 бит, а 1 байт. Любое значение, не равное нулю, интерпретируется как true .
3.2 Битовые операции
Битовые операции применяются к числам в двоичном коде. При необходимости вы можете узнать больше о двоичном коде и правилах перевода чисел из одной системы счисления в другую из статей:
Ниже показано как выполняется операция логического ИЛИ для такого фрагмента кода:
3.3 Приведение типов
В C++ различают два вида преобразования типов данных: явное и неявное.
Неявное преобразование происходит автоматически. Это выполняется во время сравнения, присваивания или вычисления выражения различных типов. Например, следующая программа выведет на консоль значение типа float .
Наивысший приоритет получает тот тип, при котором произойдет минимальная потеря информации (в результате округления). Не стоит злоупотреблять неявным преобразованием типов, так как могут возникнуть разного рода непредвиденные ситуации.
В этом примере при присваивании выполнится неявное приведение переменной типа float к типу int . В результате работы программы на экран будет выведено число 123 .
Явное преобразование в отличие от неявного осуществляется программистом. Записать это можно следующим образом:
b = (int) a;
или
b = int(a);
Тут мы явно указываем, что переменной b нужно присвоить значение a, приведенное к типу int .
В С++ определены следующие операторы:
-
static_cast<> () — осуществляет преобразование связанных типов данных. Этот оператор приводит типы по обычным правилам, что может потребоваться в случае, когда компилятор не выполняет автоматическое преобразование. Синтаксис будет выглядеть так:
Тип static_cast <Тип> (объект);
С помощью static_cast нельзя убрать константность у переменной, но это по силам следующему оператору.
3.4 Составное присваивание, инкремент/декремент
В ваших программах часто нужно выполнить что-то типа
a = a+b;
вместо такой конструкции можно использовать специальный вид оператора:
a += b;
Еще чаще в программах нужно увеличивать или уменьшать значение переменной ровно на единицу:
Аналогично работает постфиксный и префиксный декремент (оператор -- ).
Здравствуйте!
Интересно, когда нужно использовать целую переменную, часто ли пишут что-то кроме int? Когда на практике это бывает нужно?
В каком-нибудь небольшом цикле, к примеру, от 0 до 9, в учебниках обычно используют тип int.
Хотя, опять же, заморачиваться с этим на ранних этапах разработки не стоит. Лучше пораньше выпустить программу, а потом уже заниматься ее профилированием.
Читайте также: