Раздел: Задачи / Простейшие /
Как преобразовать байт в килобайт
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Условие задачи 6.1.2.30
Задача 6.1.2.30
Дана величина А, выражающая объём информации в байтах. Перевести А в более крупные единицы измерения информации.
Если вы изучали информатику в школе, то вы помните, что наименьшая единица измерения информации - это бит (разряд). Бит может хранить одно из двух значений: ДА (1) или НЕТ (0). Это упрощённо )))
Однако обычно наименьшей единицей измерения информации считают байт (Б), который содержит 8 битов. То есть с помощью одного байта можно представить 256 чисел - от 0 до 255.
Как видите, в байте помещается слишком мало данных, поэтому имеются более крупные единицы информации: килобайт (кБ), мегабайт (МБ), гигабайт (ГБ), терабайт (ТБ) и т.д. Все приставки и множители СИ вы можете найти здесь.
Однако эти приставки касаются десятичной системы. В информатике всё несколько сложнее, потому что в основе исчисления лежит не 10, а число 2 (так как всё опирается на двоичную систему). Поэтому возникла некая путаница, поскольку существуют специальные единицы, такие как кибибайт (КиБ), мебибайт (МиБ), гибибайт (ГиБ), тебибайт (ТиБ) и т.п., которые увеличивают на 10 степень числа 2. То есть:
1 Б = 20 = 1 Б 1 КиБ = 210 = 1024 Б 1 МиБ = 220 = 1024 кБ = 1048576 Б 1 ГиБ = 230 = 1024 МБ = 1048576 кБ = 1073741824 Б 1 ТиБ = 240 = 1024 ГБ = 1048576 МБ = 1073741824 кБ = 1099511627776 Б
Поэтому 1 КиБ равен не 1000 Б, а 1024 Б и так далее. Путаница же в том, что не всегда единицы указываются правильно. То есть, производитель, например, может указать 1 ГБ, имея в виду 1 ГиБ, и наоборот - в зависимости от того, что ему выгоднее (кстати, это одна из причин, почему, например, ёмкость флешки или жёсткого диска, которая отображается в системе, всегда меньше значения, которое указано на упаковке или корпусе).
Почему производители почти никогда не пишут КиБ, МиБ и т.п.? Потому что стандарты противоречивы - одни говорят, что КБ - это килобайт (то есть 1000Б), а другие, что КБ - это кибибайт (то есть 1024Б). Ну а вообще так сложилось исторически, что практически всегда, когда мы говорим килобайт и т.п., мы подразумеваем, что он равен 1024 байта.
В общем, как видите, задача может оказаться не такой простой, как мы рассчитывали.
Наиболее сложно (хотя всё относительно) будет определить дробную часть результата в случае с “киби”, “меби” и т.п. Поэтому именно этот случай мы и рассмотрим, то есть будем решать задачу, переводя байты в “кибибайты”, “мебибайты” и т.п.
program mytask; //**************************************************************** // ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ //**************************************************************** var x : Double; Amount : QWORD; //**************************************************************** // ОСНОВНАЯ ПРОГРАММА //**************************************************************** begin Write('Enter the amount, in bytes : '); ReadLn(Amount); x := Amount / 1024; WriteLn(' = ', x:0:2, ' kB'); x := x / 1024; WriteLn(' = ', x:0:2, ' MB'); x := x / 1024; WriteLn(' = ', x:0:2, ' GB'); x := x / 1024; WriteLn(' = ', x:0:2, ' TB'); WriteLn('The end. Press ENTER...'); ReadLn; end.
#include <cstdlib> #include <iostream> #include <iomanip> //!!! Подключить этот файл using namespace std; double x; unsigned long long Amount; //**************************************************************** // ОСНОВНАЯ ПРОГРАММА //**************************************************************** int main(int argc, char *argv[]) { cout << "Enter the amount, in bytes : "; cin >> Amount; //Установить вывод с фиксированной точкой и //точностью 2 знака после запятой cout << fixed << setprecision(2); x = Amount / 1024; cout << " = " << x << " kB" << endl; x = x / 1024; cout << " = " << x << " MB" << endl; x = x / 1024; cout << " = " << x << " GB" << endl; x = x / 1024; cout << " = " << x << " TB" << endl; system("PAUSE"); return EXIT_SUCCESS; }
ПРИМЕЧАНИЕ
В С++, как всегда, всё несколько иначе. Также можно столкнуться с некоторыми погрешностями. Точнее, отличиями от такой же программы на Паскале из-за особенностей форматирования, представления чисел и т.п.
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее... |
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |