Skip to main content

Basics of Programming : Understanding Big Endian and Little Endian


Endianness refers to the sequential order in which bytes are arranged into larger numerical
values when stored in memory.

When we consider any multi byte value we know which is its LSB ( Least Significant Byte) and
which is MSB (Most Significant Byte) based on the arrangement of LSB or MSB in lower address
of the memory, the endianness is defined.

There are two ways in which multi byte values are stored in memory
  • Little Endian
  • Big Endian

Little Endian : If the lower byte (LSB) is stored in lower address of the memory this arrangement
is called as little endian

Big Endian : If the Higher byte (MSB) is stored in lower address of the memory this arrangement
is called as Big Endian.


For example,
 Consider a number 0x01020304, here least significant byte is 04 and most significant byte is 01.

This is how the arrangement in memory with two different endianness.

0x100
0x101
0x102
0x103
01
02
03
04
Big Endian

0x100
0x101
0x102
0x103
04
03
02
01
Little Endian


How do you find whether your machine is little endian or big endian ?

Below C Program can help you to know endianness of the machine


#include <stdio.h>
 
/* function to show bytes in memory, from location start to start+n*/
void show_mem_rep(char *start, int n) 
{
    int i;
    for (i = 0; i < n; i++)
         printf(" %.2x", start[i]);
    printf("\n");
}
 
/*Main function to call above function for 0x01234567*/
int main()
{
   int i = 0x01234567;
   show_mem_rep((char *)&i, sizeof(i));
   getchar();
   return 0;
}


When above program is run on little endian machine, gives “67 45 23 01” as output , while if it
is run on endian machine, gives “01 23 45 67” as output.


Comments

Post a Comment

Popular posts from this blog

Basics of Programming : Variables

Variables Before going into definition of variable, let us consider any mathematical equation which we have studied in our schools. For example consider, 2x + 5y = 35 We do not have to know the use of this equation, but we just know that we can substitute some values for x and y which can satisfy the equation. For example (x,y) can take values (10, 3) or (5, 4). So we can say that x and y can hold some values or x and y can are placeholders for some data. In the same way we need something for holding data in computers. Those are called as variables. In other words we can also say that, variables are the name given for memory location. Since data are stored in some memory location, variables are the labels for those memory locations.

Linux Kernel - Introduction

Linux Torvalds developed the first version of Linux in 1991 as an operating system for computers powered by the intel microprocessor.   Started as a terminal emulator Linux evolved over a period. What is an operating system ? The operating system is considered as a part of the system responsible for basic use  and administration. This includes the kernel and device drivers, boot loaders, command  shell or other user interface and basic file and system utilities. The term system, in turn  refers to the operating system   and all the application running on top of it. The user interface is the outermost portion of the operating system, the kernel is the  innermost. The kernel sometimes referred as the supervisor, core or internals of the  operating system. Typical components if the kernel are interrupt handlers to service  interrupt requests, a scheduler to share the processor time among multiple processes,  a mem...

Basics of Programming : Data Types

We have seen that variables are placeholders for data. When we say data, it can be a integral numbers like 3,5 or it can be a real number like 2.6 , 1.8. In computer science, we define different types of data which we can store in memory location. A data type in a programming language is set of data with predefined values. Examples include, integers, floating point, characters, Strings etc. Even though ultimatly everything in memory stored in terms of zeros and ones, it is not practical  for us to code interms of zeros and ones. So to help users with programming compilers provide programmers the data types, which are in readable data which we use in day today transactions. The data types are categorized based on the representation in memory or the size it occupies in memory. For example, integer takes 4 bytes ( depends on the compiler, some may take 2 bytes), float takes 4 bytes, a character takes 1 byte. There are two types of data types. System define...