Endianness is a term that describes the order in which a sequence of bytes are stored in computer memory. Endianness can be either big or small, with the adjectives referring to which value is stored first.
Big endian vs. little endian
Big-endian is an order in which the "big end" (most significant value in the sequence) is stored first (at the lowest storage address). Little-endian is an order in which the "little end" (least significant value in the sequence) is stored first. For example, in a big-endian computer, the two bytes required for the hexadecimal number 4F52 would be stored as 4F52 in storage (if 4F is stored at storage address 1000, for example, 52 will be at address 1001). In a little-endian system, it would be stored as 524F (52 at address 1000, 4F at 1001).
For people who use languages that read left-to-right, big endian seems like the natural way to think of a storing a string of characters or numbers - in the same order you expect to see it presented to you. Many of us would thus think of big-endian as storing something in forward fashion, just as we read.
An argument for little-endian order is that as you increase a numeric value, you may need to add digits to the left (a higher non-exponential number has more digits). Thus, an addition of two numbers often requires moving all the digits of a big-endian ordered number in storage, moving everything to the right. In a number stored in little-endian fashion, the least significant bytes can stay where they are and new digits can be added to the right at a higher address. This means that some computer operations may be simpler and faster to perform.
Note that within both big-endian and little-endian byte orders, the bits within each byte are big-endian. That is, there is no attempt to be big- or little-endian about the entire bit stream represented by a given number of stored bytes. For example, whether hexadecimal 4F is put in storage first or last with other bytes in a given storage address range, the bit order within the byte will be:
It is possible to be big-endian or little-endian about the bit order, but CPUs and programs are almost always designed for a big-endian bit order. In data transmission, however, it is possible to have either bit order.
Experts observe that Internet domain name addresses and e-mail addresses are little-endian. For example, a big-endian version of our domain name address would be:
Both big endian and little endian are widely used in digital electronics. The endianness in use is typically determined by the CPU.
IBM's 370 mainframes, most RISC-based computers, and Motorola microprocessors use the big-endian approach. TCP/IP also uses the big-endian approach (and thus big-endian is sometimes called network order).
There are also mixed forms of endianness. For example, VAX floating point uses mixed-endian (also referred to as middle-endian). The ordering of bytes in a 16-bit word differs from the ordering of 16-bit words within a 32-bit word. Bi-endian processors can operate in either little-endian or big-endian mode, and switch between the two.
Language compilers such as that of Java or FORTRAN have to know which way the object code they develop is going to be stored. Converters can be used to change one kind of endian to the other when necessary.
In 1980, computer scientist Danny Cohen applied the terms big endian and little endian to digital electronics in his article “On Holy Wars and a Plea for Peace.”
Big-endian and little-endian derive from Jonathan Swift's Gulliver's Travels in which the Big Endians were a political faction that broke their eggs at the large end ("the primitive way") and rebelled against the Lilliputian King who required his subjects (the Little Endians) to break their eggs at the small end.
While many mainframe computers are big-endian, most modern computers are little endian. Endianness is initially an arbitrary decision by the semiconductor vendor that can have a long-term impact on a line of products. When vendors update their technology, they keep the existing endianness to help maintain backward compatibility. For example, the designers of the Motorola 68000 and the Intel 8086 (predecessor of the x86 family) chose their endianness in the 1970s and continue to use their respective endianness today.