Раздел: Задачи / Простейшие /

Как преобразовать байт в килобайт

Основы программирования 2.0 Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее...

Условие задачи 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 байта.

В общем, как видите, задача может оказаться не такой простой, как мы рассчитывали.

Наиболее сложно (хотя всё относительно) будет определить дробную часть результата в случае с “киби”, “меби” и т.п. Поэтому именно этот случай мы и рассмотрим, то есть будем решать задачу, переводя байты в “кибибайты”, “мебибайты” и т.п.

Решение задачи 6.1.2.30 на Паскале
 
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.
Решение задачи 6.1.2.30 на С++
#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 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Помощь в технических вопросах Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика