This commit is contained in:
Miloslav Ciz 2024-03-14 23:30:14 +01:00
parent 6ac96e5e81
commit a8a438148b
33 changed files with 1816 additions and 1753 deletions

View file

@ -1,8 +1,8 @@
# Byte
Byte (symbol: B) is a basic unit of [information](information.md), nowadays practically always consisting of 8 [bits](bit.md) (in which case it is also called an **octet**), which allow it to store 2^8 = 256 distinct values (for example a number in range 0 to 255). It is usually the smallest unit of memory a [CPU](cpu.md) is able to operate on, and memory addresses are assigned by one byte steps. We use bytes to measure the size of [memory](memory.md) and derive higher memory [units](memory_units.md) from it, such as a kilobyte (kB, 1000 bytes), kibibyte (KiB, 1024 bytes), megabyte (MB, 10^6 bytes) etc. In [programming](programming.md) a one byte [variable](variable.md) is nowadays seen as very small and used if we are really limited by memory constraints (e.g. [embedded](embedded.md)) or to mimic older 8bit computers ("[retro](retro.md) games" etc.): one byte can be used to store very small numbers (while in mainstream processors numbers nowadays mostly have 4 or 8 bytes), text characters ([ASCII](ascii.md), ...), very primitive colors (see [RGB332](rgb332.md), [palettes](palette.md), ...) etc.
Byte (symbol: B) is a basic unit of [information](information.md), nowadays already practically always consisting of 8 [bits](bit.md) (for which it's also called an **octet**), that allow it to store 2^8 = 256 distinct values (for example a number in range 0 to 255). It is commonly the smallest unit of computer memory a [CPU](cpu.md) is able to operate on; memory addresses are assigned by steps of one byte. We use bytes to measure the size of [memory](memory.md) and derive higher memory [units](memory_units.md) such as a kilobyte (kB, 1000 bytes), kibibyte (KiB, 1024 bytes), megabyte (MB, 10^6 bytes) and so forth. In conventional [programming](programming.md) a one byte [variable](variable.md) is seen as very small and used if we are really limited by memory constraints (e.g. [embedded](embedded.md)) or to mimic older 8bit computers ("[retro](retro.md) games" etc.): one byte can be used to store very small numbers (while in mainstream processors numbers nowadays mostly have 4 or 8 bytes), text characters ([ASCII](ascii.md), ...), very primitive [colors](color.md) (see [RGB332](rgb332.md), [palettes](palette.md), ...) etc.
Historically *byte* was used to stand for the basic addressable unit of memory that could store one text character or another "basic value" and could therefore have a different size than 8 bits: e.g. ASCII machines might have had a 7bit byte, 16bit machines a 16bit byte etc.; in [C](c.md) (standard 99) `char` is the "byte" data type, its byte size is always 1 (`sizeof(char) == 1`), though its number of bits (`CHAR_BIT`) can be greater or equal to 8; if you need an exact 8bit byte use types such as `int8_t` and `uint8_t` from the standard `stdint` library. From now on we will implicitly talk about 8bit bytes.
Historically *byte* was used to stand for the basic addressable unit of memory capable of storing one text character or another "basic value" and could therefore have a different size than 8 bits: for example ASCII machines might have had a 7bit byte, 16bit machines a 16bit byte etc.; in [C](c.md) (standard 99) `char` is the "byte" data type, its byte size is always 1 (`sizeof(char) == 1`), though its number of bits (`CHAR_BIT`) can be greater or equal to 8; if you need an exact 8bit byte use types such as `int8_t` and `uint8_t` from the standard `stdint` library. From now on we will implicitly talk about 8bit bytes.
**Value of one byte can be written exactly with two [hexadecimal](hexadecimal.md) digits** with each digit always corresponding to higher/lower 4 bits, making mental conversions very easy; this is very convenient compared to [decimal](decimal.md) representation, so programmers prefer to write byte values in hexadecimal. For example a byte whose binary value is *11010010* is *D2* in hexadecimal (*1101* is always *D* and *0010* is always *2*), while in decimal we get 210.