Registreren

    Informatie

    Het is heel gemakkelijk om lid te worden. Door je gegevens op te geven op de registratie pagina ontvang je automatisch een email met je inlog gegevens.

  • Registreer je hier

Aanmelden

    Informatie

    Omdat je niet aangemeld bent is het gebruikerspaneel niet beschikbaar. Vul hiernaast je gegevens in om gebruik te maken van het gebruikerspaneel.

Aanmeldformulier


Bits en bytes

Bits en bytes

Berichtdoor RedRose » 12 Aug 2008 22:59

Inleiding
Op de harde schijf in de computer wordt informatie in de vorm van bits en bytes opgeslagen. In dit artikel zal ik precies uitleggen wat bits en bytes zijn, hoe je er mee kunt rekenen, en wat je ermee kunt doen.


Bits? Bytes?
De grootte van een bestand wordt gemeten in bytes - en als de bestanden groter worden in kilobytes, megabytes of zelfs gigabytes. Meestal komt één byte overeen met één teken, bijvoorbeeld A, a of 4. In een byte gaan acht bits. Een bit kun je vergelijken met een lampje: deze kan 'aan' of 'uit'. We noteren dit met een 1 voor 'aan' en een 0 voor 'uit'. Doordat er in een byte acht bits gaan, zijn er 256 (namelijk 2*2*2*2*2*2*2*2 = 28 ( 2 tot de macht 8 ) mogelijkheden. Ik zal laten zien waarom dit is. Omdat 256 mogelijkheden een beetje veel is, zal ik in dit voorbeeld 3 bits gebruiken. Met drie bits zouden er theoretisch (2*2*2=) 8 mogelijkheden zijn:

  • 000
  • 001
  • 010
  • 011
  • 100
  • 101
  • 110
  • 111
Zoals je ziet zijn dit precies acht mogelijkheden.


Kilobytes? Megabytes?
Het voorvoegsel kilo betekent duizend, maar in de computerwereld zijn we daar een beetje van afgeweken; bij ons betekent kilo 1024.
Eén kilobyte komt dus overeen met 1024 bytes.
Het voorvoegsel mega betekent miljoen, maar ook hier zijn wij afgeweken. Mega betekent bij ons: 1048576.
Eén megabyte komt dus overeen met 1048567 bytes.
Merk op dat 1048567 gelijk is aan 1024*1024.

Om niet altijd kilobyte of megabyte op te hoeven schrijven, hebben we afkortingen bedacht: KB en MB.

Als je een nieuwe harde schijf koopt, krijg je vaak een aantal gigabytes te horen die er op zitten. Gigabyte is nog een stapje groter dan megabyte. Ook bestaan er nog terabytes en pentabytes en nog veel groter, maar dat komt niet zo vaak voor. Voor de duidelijkheid is hier een tabelletje:

  • 1 PB = 1024 TB
  • 1 TB = 1024 GB
  • 1 GB = 1024 MB
  • 1 MB = 1024 KB
  • 1 KB = 1024 B
  • 1 B = 8 b

MebiBytes?
In de computerwereld bestaat nog al wat verwarring, aangezien voorvoegsels als kilo- en mega- gebruikt worden voor respectievelijk 1000 en 1000000, in tegenstelling tot de in de computerwereld gebruikelijke 1024 en 1048576.

Om verwarring te voorkomen wordt tegenwoordig gebruik gemaakt van nieuwe benamingen: een KiloByte heet nu KibiByte en een MegaByte (MB) MebiByte. Vanuit marketingtechnisch oogpunt maken verkopers van bijvoorbeeld opslagapparatuur gebruik van oude benamingen, omdat dit nu eenmaal grotere getallen oplevert. Om als voorbeeld de datakaart van mijn digitale camera te nemen, met een grootte van 256MB:

256MB = 244MiB


Rekenen
Zoals beloofd zouden we ook een stukje gaan rekenen in bits en bytes. Uit het vorige stukje is al gebleken dat 1 MB overeenkomt met (1024*1024 =) 1048567 B. Je kunt dus zeggen dat elk stapje dat je groter wordt, het aantal bytes met 1024 wordt vermenigvuldigd. We kunnen dus rekenen met machten van 1024, wat we nu dus ook zullen doen.

1 MB = 10242 B

Andersom geldt:

1 B = 1024-2 MB

Zo is ook:

1 TB = 10243 KB


Toepassingen
Dit is allemaal leuk en aardig, maar wat kunnen we hier nu concreet mee? Ten eerste kun je nooit een echte programmeur of informaticus zijn zonder dat je enigszins op de hoogte bent van de werking van een computer. Ten tweede kunnen we bovenstaande kennis goed gebruiken voor het omrekenen van bytes in kilobytes en megabytes. Wanneer je in een programmeertaal de ruimte op een harde schijf of de grootte van een database opvraagt, wordt deze teruggegeven in de vorm van bytes. Binnen het programma valt prima te werken met bytes, maar als we aan de gebruiker willen tonen hoe groot een bepaald bestand is, ziet hij liever dat het bestand 4,3 MB groot is dan 45088768 B. Het is dus belangrijk voor de leesbaarheid.


Voorbeeld
Toevallig heb ik net voor een kleine applicatie een functie in PHP geschreven waarmee ik makkelijk kan omrekenen van bytes naar een mooi getal. In mijn applicatie gebruik ik de functie voor het omrekenen van de grootte van een database, maar je kunt er om het even welke hoeveelheid bytes ingooien. Op het moment rekent de functie niet verder dan pentabytes, maar je kunt hem zelf makkelijk grote zaken laten uitrekenen.

PHP
Code: Alles selecteren
<?php
/**
* string Size
* This function rewrites a specified number of bytes to a readable number with unit in two decimals.
* Example:
* 2000 B = 1.95 KB
* 2000000 B = 1.91 MB
* Units go up to Petabytes (PB).
* @return
* A nice size in two decimals.
*/
function Size($bytes){
   // Take absolute counterpart of $bytes
   $bytes = abs($bytes);
   // All units in logical order
   $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
 
   $units 
= array_reverse($units, true);
 
   foreach
($units as $num => $unit){
      if($bytes >= pow(1024, $num)){
         return sprintf("%.2f %s", $bytes / pow(1024, $num), $unit);
      }
   }
   return "0 B";
}
?>

Een korte uitleg kan misschien geen kwaad:
Aan het begin van de functie wordt de absolute waarde van $bytes genomen om te voorkomen dat er een negatief getal wordt ingevoerd.

Dan wordt een array gedeclareerd waarin alle groottes staan: bytes, kilobytes enzovoort. Omdat we vanaf de grootste eenheid willen rekenen, draaien we de array in zijn geheel om met array_reverse.

Vervolgens gaan we de hele array door met behulp van een foreach-structuur. We kijken of het aantal bytes groter dan of gelijk aan 1024 tot de huidige macht (in het geval van TB is dat bijvoorbeeld 4). Als dat zo is retourneren we $bytes / 1024 tot de huidige macht met de huidige eenheid erachter.

Mensen die vroeger tijdens wiskunde niet hebben liggen slapen hebben al door dat er een zwak punt in zit. Wanneer $bytes = 0 klopt de functie niet helemaal: 1024x is namelijk nooit 0. Daarom heb ik aan het eind van het script het magische return "0 B" opgenomen.
RedRose
Globale moderator
 
Berichten: 1994
Geregistreerd: 14 Jun 2005 18:12

Terug naar ALGEMEEN



Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast


cron